我有一个推送到其他人下载的远程和的回购。在历史中是由我提交的提交引入的错误。令人尴尬的是,它使它变得笨拙(在一次提交中逻辑过多)。除了回到过去并用湿面条打击过去的自我之外,正确的做法是将交易分成几个。
可悲的是,这已经被其他人推动和克隆了(如果我从他们下面重新定位,他们会非常不高兴)。所以我认为我可以分支,还原提交,樱桃选择提交,交互式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
答案 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