使用git合并来自另一个分支提交的特定文件

时间:2010-06-22 05:19:57

标签: git

我有一个我正在使用的git存储库,我搞砸了。我对源代码树做了几个补丁,然后继续进行升级而不先提交补丁。然后我把整批作为一个整合。我的意图是在一个单独的分支上进行升级,我在提交之前创建了它。

现在,此时我有两个(相关的)分支主机,它仍然稳定但需要修补。我有new_auth_system,它在master之前有两个提交。第一个是我昨天做的补丁并且已经提交了。第二个有几个补丁,并且在几个文件中有大量且模糊的删除和添加。

我一直在尝试使用git checkout将特定文件从提交中提取出来并将其粘贴到master的克隆上以试图纠正错误,但我一直“致命:引用不是树”< / p>

如何在提交和另一个分支中提取特定文件?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果你的情况是:

 x--x--x--x (master, need patch)
        \
         y1--y2  new_auth_system, with y1 containing some patches *and* updates
                                  and y2 containing massive refactoring

我先建议:
(如果你还没有推动new_auth_system

  • a rebase --interactive将y1拆分为y1a(仅包含补丁)和y1b(更新),y2a(更多补丁)和y2b(大规模重构)
    git checkout new_auth_system
    git rebase -i y1^

     x--x--x--x (master, need patch)
            \
             y1a--y1b--y2a--y2b  new_auth_system, with y1a containing only patches
                                                       y1b containing only updates
                                                       y2a containing only patches
                                                       y2a containing refactoring
  • a rebase --interactive重新排序'y'提交(先修补,更新和重构第二)
    git checkout new_auth_system
    git rebase -i y1a^

     x--x--x--x (master, need patch)
            \
             y1a--y2a--y1b--y2b  new_auth_system, with patches first (y1a, y2a)
                                                       updates and refactoring second
  • git merge以在master中集成这些补丁:
     x--x--x--x------x' (master, with patches)
            \       /
             y1a--y2a--y1b--y2b  new_auth_system, with patches first, 
                                                       updates and refactoring second

这比尝试将一些文件从一个分支隔离到另一个分支更好:Git reasons in term of project(公共树下的文件集合),而不是单个文件。

答案 1 :(得分:0)

我对你的问题感到有点困惑,所以如果我的回答不合适,请告诉我。

据我所知,您希望将特定文件回滚到特定提交。要做到这一点:

使用git log获取您正在寻找的版本(哈希):

git log -p filename

获得版本(哈希)后,使用git checkout还原该文件:

git revert --no-commit version