使用git checkout合并文件

时间:2014-03-27 13:31:48

标签: git

如果我只想从功能分支中选择一个文件并将其合并到master,并且如果真正的合并不重要,我将使用git checkout 。但是,如果master中的同一文件有新的更改,则结帐操作将覆盖这些更改。

我想要git checkout做的事情基本上是合并文件的更改,而不是简单地覆盖它们(这看起来与其目的相反,我知道)。基本上应该执行以下步骤:

git diff <sha1>..<sha2> > changes.patch
git apply changes.patch

当然,我可以创建一个别名来做这件事,但我特别感兴趣的是看git checkout是否可以为我做这件事。

2 个答案:

答案 0 :(得分:0)

git cherry-pick是您发布的两个命令的一站式版本。鉴于此工具的存在,我不认为有git checkout的调用会做同样的事情 - 无论如何,这似乎是该工具的预期用途。

答案 1 :(得分:0)

主要是合成Grantovich的帖子和我对它的评论......

在Git中合并,因为它们在提交上运行,发生在存储库的整个快照上,这些快照由合并的两个(或更多)方面的提交表示,所以不,基本上你没有办法只合并一个文件

尽管如此,你可以做些什么:

  1. 确保您的工作树和索引是干净的(如果您还有不想提交的更改,可以使用git stash。)
  2. git cherry-pick -n <commitish> <commitish>包含您要选择的更改。-n如果没有冲突,--no-commitgit reset命令行选项会阻止此命令自动记录新提交。
  3. 除了要合并的文件之外的所有文件中的Unstage更改。请使用{{1}}。
  4. 另一方面,git read-tree(在Git中执行合并的命令)手册提到了{em>可能只做您想要的git merge-one-file命令。不幸的是,它似乎非常低级,老实说我从未尝试过使用它。