假设我有 2 个分支 master
和 dev
.
dev
分支领先master
通过 2 次提交,并且这些提交都没有被 merge 或推送到任何 remote
.
dev
分支看起来像这样:
dev A - B - C - D - E
而 A 是最旧的,E 是最新的提交。
我想达到这个状态:
dev A - B - C - E
基本上我想在最后一次提交之前取消提交,就好像它从未发生过一样。也不应该有冲突(E 不依赖于 D 的更改)。
我可以使用交互式 rebase 吗?
最佳答案
我会使用 rebase 的交互式形式。在 dev
上(您需要有干净的工作副本):
git rebase -i HEAD~~
在您最喜欢的文本编辑器中,您可以获得最后 2 次提交的列表。只需评论/删除不需要的提交行。
如果 HEAD
依赖于 HEAD~
引入的更改,您可能会遇到 merge 冲突,解决它们后,您将丢失以前的历史记录(仍然可以通过 reflog
,当然)。我通常更喜欢这种方法。
如果你想保留你以前的历史(和不需要的提交),你应该这样做
git checkout HEAD~~ # go to last good commit
git checkout -b new_branch # create a new branch and forget about the original
git cherry_pick dev # copy the commit on top of `dev` to `new_branch`
你仍然会遇到冲突,但你不会修改 dev
的历史记录。
另一方面,如果不需要的提交发生在 master
上并且您不想破坏任何人的构建,您可以执行 git revert HEAD~
关于git - 如何在上次提交之前取消提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28882328/