如果我只想从功能分支中选择一个文件并将其合并到master
,并且如果真正的合并不重要,我将使用git checkout
。但是,如果master
中的同一文件有新的更改,则结帐操作将覆盖这些更改。
我想要git checkout
做的事情基本上是合并文件的更改,而不是简单地覆盖它们(这看起来与其目的相反,我知道)。基本上应该执行以下步骤:
git diff <sha1>..<sha2> > changes.patch
git apply changes.patch
当然,我可以创建一个别名来做这件事,但我特别感兴趣的是看git checkout
是否可以为我做这件事。
答案 0 :(得分:0)
git cherry-pick
是您发布的两个命令的一站式版本。鉴于此工具的存在,我不认为有git checkout
的调用会做同样的事情 - 无论如何,这似乎是该工具的预期用途。
答案 1 :(得分:0)
主要是合成Grantovich的帖子和我对它的评论......
在Git中合并,因为它们在提交上运行,发生在存储库的整个快照上,这些快照由合并的两个(或更多)方面的提交表示,所以不,基本上你没有办法只合并一个文件
尽管如此,你可以做些什么:
git stash
。)git cherry-pick -n <commitish>
<commitish>
包含您要选择的更改。-n
如果没有冲突,--no-commit
或git reset
命令行选项会阻止此命令自动记录新提交。另一方面,git read-tree
(在Git中执行合并的命令)手册提到了{em>可能只做您想要的git merge-one-file
命令。不幸的是,它似乎非常低级,老实说我从未尝试过使用它。