2

我有一个被推送到远程并被其他人下载的仓库。在历史记录中有一个由我所做的提交引入的错误。令人尴尬的是,提交它很笨拙(一次提交中逻辑太多)。除了回到过去并用湿面条敲打我过去的自我之外,正确的做法是使用交互式 rebase 将提交拆分为多个。

可悲的是,这已经被其他人推送和克隆了(如果我从他们下面重新定位,他们会非常不高兴)。所以我想我可以分支、恢复提交、cherry-pick 提交、交互式 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
4

1 回答 1

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
于 2013-11-13T01:27:45.587 回答