如何仅合并某个提交中的单个文件

时间:2014-02-18 06:46:44

标签: git

我有2个文件在某个分支中提交,我想只合并来自提交变更集的单个文件。我该怎么做?

2 个答案:

答案 0 :(得分:2)

git-merge没有选项可以合并路径列表。相反,您必须手动执行此操作,方法是指示git在合并发生后但在提交之前停止。然后,您可以将第二个文件重置为HEAD的内容,并将这些内容放在磁盘上,这将导致仅合并第一个。

例如,如果有问题的提交是0123abc,并且您希望从合并中省略的文件是file2.txt

git merge --no-commit --no-ff 0123abc
git reset HEAD file2.txt
git checkout -- file2.txt

答案 1 :(得分:1)

假设您在其中一个文件看起来像在更改的分支中看到的那样,并且对于另一个文件看起来像在当前分支中那样,那么您可以从一个分支中提取更改没有实际创建合并。要以交互方式执行此操作,您可以使用git rebase -i

您可以在要合并的文件上使用git stashgit checkout到未修改的分支,然后git stash pop

,来简化交互式流程。

如果您希望最终使用当前分支中所做的某项更改,并且另一项更改消失,则可以手动还原不需要的更改,然后git commit --amend编辑原始提交,只有另一个文件保持不变。

有更多高级选项可供使用,使用blob和一些git的低级合并功能,但是如果没有很棒的git-fu就可以避免它们。