我在2个不同的分支工作:发行和开发。
我注意到我仍然需要将一些提交给发布分支的更改集成回开发分支。
问题是我不需要所有的提交,只有一些块在某些文件,所以一个简单的
git cherry-pick bc66559
这是行不通的。
当我做
git show bc66559
我可以看到差异,但真的不知道一个好方法,部分应用到我目前的工作树。
我在2个不同的分支工作:发行和开发。
我注意到我仍然需要将一些提交给发布分支的更改集成回开发分支。
问题是我不需要所有的提交,只有一些块在某些文件,所以一个简单的
git cherry-pick bc66559
这是行不通的。
当我做
git show bc66559
我可以看到差异,但真的不知道一个好方法,部分应用到我目前的工作树。
当前回答
假设您想要的更改位于您想要更改的分支的头部,使用git签出
对于单个文件:
git checkout branch_that_has_the_changes_you_want path/to/file.rb
对于多个文件只需Daisy chain:
git checkout branch_that_has_the_changes_you_want path/to/file.rb path/to/other_file.rb
其他回答
我知道我在回答一个老问题,但似乎有一种新的方式来进行交互式检查:
git checkout -p bc66559
我可以从另一个git提交中交互式地选择大块吗?
基于Mike Monkiewicz的回答,您还可以从提供的sha1/branch中指定一个或多个文件来签出。
git checkout -p bc66559 -- path/to/file.java
这将允许您以交互方式选择要应用于文件当前版本的更改。
实际上,这个问题的最佳解决方案是使用签出推荐
git checkout <branch> <path1>,<path2> ..
例如,假设你在master中,你想要从dev1中更改project1/Controller/WebController1.java和project1/Service/WebService1.java,你可以使用这个:
git checkout dev1 project1/Controller/WebController1.java project1/Service/WebService1.java
这意味着主分支只从dev1更新这两条路径。
假设您想要的更改位于您想要更改的分支的头部,使用git签出
对于单个文件:
git checkout branch_that_has_the_changes_you_want path/to/file.rb
对于多个文件只需Daisy chain:
git checkout branch_that_has_the_changes_you_want path/to/file.rb path/to/other_file.rb
使用git format-patch来切割你所关心的提交部分,然后git am将其应用到另一个分支
git format-patch <sha> -- path/to/file
git checkout other-branch
git am *.patch