4

我有一个分支,我想将其重新定位到我的主人的最新提交。问题是 master 上的一个干预提交是删除并忽略一组特定的文件(请参阅此问题)。

如果我只是做一个直接的变基,这些文件将再次被删除。无论如何,在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 重新设置分支,然后在完成后合并,但我仍然想知道是否有办法“正确”地做到这一点)

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

4

1 回答 1

2

从您的评论中,我了解到您需要在除B之外的 master 之上重新设置 dev 分支。
您不希望看到您在一个分支中删除的文件在另一个分支中被删除。

一种可能的解决方案是:

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

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

于 2010-03-19T11:33:24.563 回答