git:如何在重定位文件删除提交时不删除文件

时间:2010-03-19 09:54:02

标签: git rebase git-rebase

我有一个分支,我想在我的主人的最新提交上重新加入。问题是master上的其中一个提交是删除和忽略一组特定的文件(参见this question)。

如果我只做一个直接的rebase,这些文件将再次被删除。无论如何这样做, git中,而不是手工复制所有文件,然后再将它们复制回来?

或者我应该做一些事情,比如在master上创建一个新的分支,然后合并来自旧分支的提交?

尝试ascii艺术:

master    branch
  |        w  work in progress on branch
  C        |  committed further changes on master
  |        |
  B        /  committed delete/ignore files on master
  |       2  committed changes on branch
  |      /  
  A     /  committed changes on master which I now need to get branch working
  |    1  committed changes on branch
  0___/  created branch

(做艺术,我意识到我可以从A重新绑定分支,然后在我完成时合并,但我仍然想知道是否有办法正确地做到这一点')< / em>的

更新警告任何尝试此操作的人。这里提出的解决方案很好,但是当你再次检查master时,将重新应用B提交,并且你再次丢失所有文件:(

1 个答案:

答案 0 :(得分:2)

根据你的评论,我认为你需要在主人之上重新设置dev分支,除了 B. 您不希望在一个分支中删除您删除的文件。

一种可能的解决方案是:

  • rebase --interactive master重写提交顺序(如果可能)
    0--A--C'--B'  master
     \
      --1--2--w     dev
  • 在C'之上的rebase dev分支(代表除B之外的所有主提交)
    0--A--C'--B' master 
           \
            --1'--2'--w' dev

这意味着您还没有将master推送到另一个存储库(否则,对于那些希望在自己的repo / master分支中拉取master的人来说,这会涉及合并的噩梦)