您可以使用交互式变基来做到这一点,但请注意重写您已经共享的历史记录的风险。
首先,使用git rebase -i <commit2> 启动rebase。这将打开一个如下所示的编辑器窗口:
pick 8e1729c <msg3>
pick 5f4f4b1 <msg4>
pick d0936bb <msg5>
pick 652eb5c <msg6>
pick ceebbb7 <msg7>
pick d42a432 <msg8>
pick e203251 <msg9>
pick 7701829 <msg10>
您将像这样编辑此文件中的第一列:
edit 8e1729c <msg3>
pick 5f4f4b1 <msg4>
pick d0936bb <msg5>
pick 652eb5c <msg6>
pick ceebbb7 <msg7>
pick d42a432 <msg8>
pick e203251 <msg9>
pick 7701829 <msg10>
保存文件并退出。 Git 将通过重新应用显示的提交来启动 rebase,但在第一个提交之后停止,以便您可以进行更改或在继续之前简单地添加一个提交。如果您想修改原始的第 3 次提交,只需立即进行更改并继续
git commit --amend
git rebase --continue
如果您想修改原始的第三次提交,请使用“撤消”它
git reset HEAD^
然后在继续之前进行任何您想要的更改
# stage all your changes
git commit
git rebase --continue
rebase 完成后,您可以通过编辑和修改提交 10 来对最后一次提交进行最终更改
# stage changes
git commit --amend
一旦你的提交是有序的,使用git log为你想要标记的两个提交找到新的SHA(rebase和--amend会改变它们!),然后简单地运行
git tag <commit3hash> <tagname>
git tag <commit10hash> <tagname>
并将所有内容推送到您的遥控器
git push -f # You need to force it, since you've rewritten history
git push --tags