Git:如何手动将工作树中的文件与HEAD中的文件合并

时间:2009-11-02 08:27:20

标签: git

我不知道我想要做的事情是否有意义,但这是解释:

我有一些由工具生成的源文件,然后稍微更改并提交。 会发生什么事情,有时我需要重新生成这些文件。

我需要手动将这个新文件与之前提交的文件合并,并从旧版本中选择要采用的部分以及从新版本中采用哪些部分。

有办法做到这一点吗?

谢谢!

3 个答案:

答案 0 :(得分:4)

您可以创建一个像“generated_files”这样的分支,但是当您生成文件时,它们永远不会触及。

在“master”分支中,您可以合并分支“generated_files”。

每次生成新文件时,都必须将其提交到“generated_files”分支,这将从之前生成的版本创建新的增量。

如果您在“master”中的此分支后合并,则这将仅应用先前版本中的增量并保留您的修改。

也许你可以在合并期间使用策略来避免冲突。

答案 1 :(得分:4)

尝试类似:

  • git clone

  • git branch -a“temp”

  • git checkout temp

  • ...生成新文件......

  • git add。

  • git commit -m“commit text”

  • git checkout master

  • git merge temp

实质上,在另一个分支中执行您的操作,只需将该分支合并到主分支。

答案 2 :(得分:1)

这样做的一种方法是使用-m选项来“git checkout”:

  1. 查看 base (祖先)版本,例如,如果要在当前版本(HEAD),先前版本(HEAD ^)和生成的文件之间进行三向合并(在工作目录中):

    git checkout HEAD^
    

    不要担心有关分离的HEAD的警告。

  2. 生成文件

  3. 使用“git checkout”的-m选项合并工作区域的更改:

    git checkout -m @{-1} # or "git checkout -m <branch>"
    
  4. 来自git checkout联机帮助页:

      

    -m ::
       - 合并::

         
        

    切换分支时,如果对当前分支和要切换到的分支之间的一个或多个文件进行本地修改,则该命令拒绝切换分支以保留上下文中的修改。但是,使用此选项,当前分支,工作树内容和新分支之间的三向合并已完成,您将进入新分支。

      

    未经测试!


    作为后备,您始终拥有 git merge-file 低级别(管道)命令。