如何将更改合并到单个文件中,而不是合并提交?

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


我遇到了同样的问题。 确切地说,我有两个分支AB具有相同的文件,但在某些文件中有不同的编程接口。 现在,文件f的方法与分支B中的接口差异无关,但在分支B已更改,但这种更改对于两个分支都很重要。 因此,我需要合并只是文件f分支B到文件f分支的A

如果我假设所有更改都在分支AB中提交,那么一条简单的命令已经解决了我的问题:

git checkout A

git checkout --patch B f

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

社区编辑:如果文件fB不存在上A还没有,那么忽略--patch选项。 否则,你会得到一个“没有改变”。 信息。


这是我在这些情况下所做的。 这是一个混乱,但它对我来说工作得很好。

  • 根据您的工作分支创建另一个分支。
  • git pull / git合并包含要复制的文件的修订版(SHA1)。 因此,这将合并所有更改,但我们只使用此分支来抓取一个文件。
  • 修复任何冲突等调查您的文件。
  • 结帐你的工作分支
  • 检出从合并中提交的文件。
  • 承诺。
  • 我尝试补丁,我的情况太难看了。 总之,它看起来像这样:

    工作分支:实验分支:B(包含file.txt,其中有要更改的变化)。

    git checkout A
    

    基于A创建新的分支:

    git checkout -b tempAB
    

    将B合并到tempAB中

    git merge B
    

    复制合并的sha1哈希值:

    git log
    
    commit 8dad944210dfb901695975886737dc35614fa94e
    Merge: ea3aec1 0f76e61
    Author: matthewe <matthewe@matthewe.com>
    Date:   Wed Oct 3 15:13:24 2012 -0700
    
    Merge branch 'B' into tempAB
    

    检出你的工作分支:

    git checkout A
    

    检出您的固定文件:

    git checkout 7e65b5a52e5f8b1979d75dffbbe4f7ee7dad5017 file.txt
    

    在那里你应该拥有它。 提交你的结果。


    你可以使用:

        git merge-file
    

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

    链接地址: http://www.djcxy.com/p/45039.html

    上一篇: How do I merge changes to a single file, rather than merging commits?

    下一篇: How do I merge a sub directory in git?