git可以使用revert拆分上游的提交吗?

时间:2013-11-13 00:39:19

标签: git

我有一个推送到其他人下载的远程的回购。在历史中是由我提交的提交引入的错误。令人尴尬的是,它使它变得笨拙(在一次提交中逻辑过多)。除了回到过去并用湿面条打击过去的自我之外,正确的做法是将交易分成几个。

可悲的是,这已经被其他人推动和克隆了(如果我从他们下面重新定位,他们会非常不高兴)。所以我认为我可以分支,还原提交,樱桃选择提交,交互式rebase,然后合并。这是最好的选择,还是我错过了什么?

我可以通过还原然后拆分来拆分已发布的提交吗?

A--B--C--D--E--F (master origin/master)
      ^- WTF commit


A--B--C--D--E--F-------------------M (master origin/master)
                \                 /
                 G--C1--C2--C3--C4   (split-and-fix-branch)
                 ^- revert commit C

1 个答案:

答案 0 :(得分:1)

所以我的直觉是正确的。下面列出了如何拆分/编辑已经推送和提取的提交。

编辑:修改过程并附有评论建议。

如果这是本地的,请仅使用get rebase -i

A--B--C--D--E--F (master origin/master)
      ^- WTF Commit

$ git checkout -b split-n-fix C

A--B--C--D--E--F (master origin/master)
      ^ (split-n-fix)

$ git revert C

A--B--C--D--E--F (master origin/master)
       \
        R (split-n-fix)

$ git cherry-pick --no-commit C

A--B--C--D--E--F (master origin/master)
       \
        R--(dirty) (split-n-fix)

$ git add -p
$ git commit
(repeat till finished)

A--B--C--D--E--F (master origin/master)
       \
        R--C1--C2--C3--C4 (split-n-fix)

$ git checkout master
$ git merge split-n-fix
$ git branch -d split-n-fix

A--B--C--D--E--F----------M (master origin/master)
       \                 /
        R--C1--C2--C3--C4

$ git push