我在2个不同的分支工作:发行和开发。

我注意到我仍然需要将一些提交给发布分支的更改集成回开发分支。

问题是我不需要所有的提交,只有一些块在某些文件,所以一个简单的

git cherry-pick bc66559

这是行不通的。

当我做

git show bc66559

我可以看到差异,但真的不知道一个好方法,部分应用到我目前的工作树。


当前回答

实际上,这个问题的最佳解决方案是使用签出推荐

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 checkout -p bc66559

我可以从另一个git提交中交互式地选择大块吗?

实际上,这个问题的最佳解决方案是使用签出推荐

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更新这两条路径。

如果“partial cherry picking”的意思是“在文件中,选择一些更改,但放弃其他更改”,可以通过引入git stash来完成:

做完整的樱桃采摘。 git重置HEAD^以将整个选定的提交转换为未分阶段的工作更改。 现在git隐藏保存-补丁:交互选择不需要的材料隐藏。 Git从工作副本中回滚存储的更改。 git提交 扔掉不想要的改变:git隐藏下降。

提示:如果你给不需要的更改的隐藏处起了一个名字:git stash save—patch junk,那么如果你现在忘记做(6),以后你会认识到隐藏处是什么。

如果你想在命令行上指定一个文件列表,并在一个原子命令中完成所有事情,尝试:

Git apply——3way <(Git show——文件列表)

——3way:如果一个补丁没有干净地应用,Git会创建一个合并冲突,所以你可以运行Git mergetool。省略——3way会让Git放弃那些不干净的补丁。

假设您想要的更改位于您想要更改的分支的头部,使用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