我有两个分支(A和B),我想合并来自分支A的单个文件与来自分支B的相应单个文件。


当前回答

git checkout <target_branch>
git checkout <source_branch> <file_path>

其他回答

我也遇到过同样的问题。准确地说,我有两个分支A和B,它们有相同的文件,但在一些文件中有不同的编程接口。现在在分支B中修改了独立于两个分支的接口差异的文件f的方法,但这一更改对两个分支都很重要。因此,我只需要将分支B的文件f合并到分支A的文件f。

一个简单的命令已经为我解决了这个问题,如果我假设所有的更改都在分支A和B中提交:

git checkout A

git checkout --patch B f

第一个命令切换到分支A,在那里我想合并B的文件f的版本。第二个命令用B的HEAD的f修补文件f。你甚至可以接受/丢弃补丁的单个部分。你可以在这里指定任何提交,而不是B,它不必是HEAD。

团体编辑:如果B上的文件f在A上还不存在,那么省略——patch选项。否则,您将收到“No Change.”消息。

假设B是当前分支:

$ git diff A <file-path> > patch.tmp
$ git apply patch.tmp -R

注意,这只对本地文件应用更改。之后你需要做出承诺。

git checkout <target_branch>
git checkout <source_branch> <file_path>

你可以用:

git merge-file

提示:https://www.kernel.org/pub/software/scm/git/docs/git-merge-file.html

这使用git的内部扩散工具。 也许有一点工作要做,但是直截了当。

#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.