我有两个分支(A和B),我想合并分支A中的单个文件和分支B中相应的单个文件。如何合并对单个文件的更改,而不是合并提交?
回答
我遇到了同样的问题。准确地说,我有两个分支A
和B
具有相同的文件,但在一些文件中有不同的编程接口。现在,分支B
中文件f
的方法与两个分支中的接口差异无关,但分支对这两个分支都是重要的。因此,我只需要将分支B
的文件f
合并到分支A
的文件f
中。
一个简单的命令已经解决了这个问题对我来说,如果我认为所有的变化都致力于在两个分支A
和B
:
git checkout A
git checkout --patch B f
第一个命令切换到分行A
,到了我要合并B
该文件的版本为f
。第二个命令将f
的文件f
修改为HEAD
的B
。您甚至可以接受/丢弃该补丁的单个部分。而不是B
您可以在此指定任何提交,它不必是HEAD
。
社区编辑:如果B
文件f
上不存在A
然而,则省略--patch
选项。否则,你会得到一个“没有改变”。信息。
工程简单而有效。谢谢! – bcr
非常有帮助。我添加了一些关于远程合并的信息,他们与分支一样工作,但并不是每个人都知道这一点。 – Soup
这只适用于需要更新文件的情况。如果我想从分支B向分支A添加新文件,该怎么办? – Neutralizer
这是我在这些情况下所做的。这是一个混乱,但它对我来说工作得很好。
- 根据您的工作分支创建另一个分支。
- git pull/git合并包含要复制的文件的修订版(SHA1)。因此,这将合并所有更改,但我们只使用此分支来抓取一个文件。
- 修复任何冲突等调查您的文件。
- 结帐您的工作分支
- 签出合并提交的文件。
- 提交。
我试过打补丁,我的情况太难看了。总之,它看起来像这样:
工作分支:A 实验分支:B(包含file.txt,其中有我想要折叠的更改。)
git checkout A
创建基于新的分支:
git checkout -b tempAB
合并B插入tempAB
git merge B
复制合并的SHA1哈希:
git log
commit 8dad944210dfb901695975886737dc35614fa94e
Merge: ea3aec1 0f76e61
Author: matthewe <[email protected]>
Date: Wed Oct 3 15:13:24 2012 -0700
Merge branch 'B' into tempAB
结帐的工作分部:
git checkout A
Checkout的固定更新文件:
git checkout 7e65b5a52e5f8b1979d75dffbbe4f7ee7dad5017 file.txt
有你应该有它。提交你的结果。
我的编辑被拒绝了,所以我附上了如何处理来自远程分支的合并更改。
如果你有一个不正确的合并后,要做到这一点,你可以做这样的事情:
# If you did a git pull and it broke something, do this first
# Find the one before the merge, copy the SHA1
git reflog
git reset --hard <sha1>
# Get remote updates but DONT auto merge it
git fetch github
# Checkout to your mainline so your branch is correct.
git checkout develop
# Make a new branch where you'll be applying matches
git checkout -b manual-merge-github-develop
# Apply your patches
git checkout --patch github/develop path/to/file
...
# Merge changes back in
git checkout develop
git merge manual-merge-github-develop # optionally add --no-ff
# You'll probably have to
git push -f # make sure you know what you're doing.
此用途git的内部difftool。 也许有一点工作要做,但很简单。
#First checkout the branch you want to merge into
git checkout <branch_to_merge_into>
#Then checkout the file from the branch you want to merge from
git checkout <branch_to_merge_from> -- <file>
#Then you have to unstage that file to be able to use difftool
git reset HEAD <file>
#Now use difftool to chose which lines to keep. Click on the mergebutton in difftool
git difftool
#Save the file in difftool and you should be done.
假设B是当前分支:
$ git diff A <file-path> > patch.tmp
$ git apply patch.tmp -R
注意,这仅适用更改本地文件。你需要事后提交。
对我来说,这产生了一个'错误:
以下命令将 (1)比较正确分支的文件,并与主人 (2)交互询问您要应用哪些修改。
git的结帐--patch主
- 1. Git:如何合并上游更改而不会导致合并提交?
- 2. 如何合并单个提交?
- 3. 合并更改svn:mergeinfo但不是文件
- 4. 合并未提交的更改
- 5. 将下一个提交的更改合并到当前提交
- 6. Git合并 - 不提交跟踪文件
- 7. 在合并其他更改提交
- 8. 合并提交没有更改ID?
- 9. TFS合并不停地合并一些文件而没有任何更改
- 10. 合并提交
- 11. git如何合并单个提交中的新更改到另一个分支?
- 12. 跨文件合并更改
- 13. git撤消合并提交另一个合并提交
- 14. git修改并合并一个不在主的提交
- 15. 合并提交提交
- 16. 合并Backbone集合而不更改订单
- 17. 单独的未提交的合并和其他更改集市
- 18. 如何合并提交到某个点
- 19. 如何合并只有一个文件从某个提交
- 20. 如何查看我在合并提交中所做的更改
- 21. 如何将我的提交与上游更改合并回来?
- 22. 更改合并CSV文件不保存
- 23. Git在合并之前合并提交
- 24. 我该如何做一个基于变更集的合并而不是基于文件的Mercurial合并?
- 25. 将更改合并到未提交更改的工作区
- 26. 如何合并KVO更改?
- 27. Gerrit更改状态:已提交,合并待定,如何解决?
- 28. 如何在合并时保护目录免受提交更改?
- 29. 如何区分/合并对部署项目文件的更改
- 30. 合并TFS 2008中的单个更改
已经在这里讨论http://stackoverflow.com/questions/449541/how-do-you-merge-selective-files-with-git-merge – positron
大多数的答复到那个职位是关于如何有选择地合并*提交*,而不是*文件*。这使选定的答案不正确。这个问题仍然没有答案。 – 2012-07-12 16:40:02
可能的重复[你如何合并选择性文件与git合并?](http://stackoverflow.com/questions/449541/how-do-you-merge-selective-files-with-git-merge) –