如何删除Git中的非上次提交?
我最近创建了一个新分支,我们称之为“branch1”,它基于另一个分支,我们称之为“master”。然后我对branch1做了一系列的承诺,现在我意识到前几次的承诺实际上是一个错误,但在前几次之后的承诺仍然是伟大的承诺!所以我在这里要做的就是基本上删除前几个提交,这样它们之后的提交基本上都会在master上重新设置…如何做到这一点呢?对于要取消的提交,您最好的选择可能是使用如何删除Git中的非上次提交?,git,Git,我最近创建了一个新分支,我们称之为“branch1”,它基于另一个分支,我们称之为“master”。然后我对branch1做了一系列的承诺,现在我意识到前几次的承诺实际上是一个错误,但在前几次之后的承诺仍然是伟大的承诺!所以我在这里要做的就是基本上删除前几个提交,这样它们之后的提交基本上都会在master上重新设置…如何做到这一点呢?对于要取消的提交,您最好的选择可能是使用git revert(文档) 关于它的3个注释: 此命令允许您还原特定的提交,而不是git reset,它会将您带回到您感兴
git revert
(文档)
关于它的3个注释:
git reset
,它会将您带回到您感兴趣的点,可能会撤消一路上的所有提交master
分支之前,您可以使用git reset--soft
在branch1
中压缩提交,然后通过git commit-m
重新提交所有更改假设这是您从最近到最早的提交历史记录:
branch1
5XXXX Good Commit
4XXXX Good Commit
3XXXX Good Commit
2XXXX Bad Commit
1XXXX Bad Commit
因此,假设您只想删除1XXXX
和2XXXX
中的代码,而不真正关心提交是保留还是删除。因此,您现在可以执行以下操作:
git还原1XXXX
这将生成一个新的提交,其消息类似于reverts 1XXXX
那么
git revert 2XXXX
这将生成一个新的提交,其消息类似于还原2XXXX
您现在有两个新提交,它们将还原为1XXXX
和2XXXX
。只需推动他们
git推送原点分支1
因此,您的承诺现在将是:
branch1
7XXXX Good Commit reverting bad commit 2XXXX
6XXXX Good Commit reverting bad commit 1XXXX
5XXXX Good Commit
4XXXX Good Commit
3XXXX Good Commit
2XXXX Bad Commit
1XXXX Bad Commit
如果您想摆脱提交本身,则可以执行以下操作:
git-rebase——交互式1XXXX
因此,在同一个分支branch1
,您现在正在对第一个错误提交1XXXX
进行重新基础。现在,您将看到一个文本编辑器,它类似于:
pick 5XXXX Good Commit
pick 4XXXX Good Commit
pick 3XXXX Good Commit
pick 2XXXX Bad Commit
pick 1XXXX Bad Commit
将错误提交的拾取
更改为挤压
pick 5XXXX Good Commit
pick 4XXXX Good Commit
pick 3XXXX Good Commit
squash 2XXXX Bad Commit
squash 1XXXX Bad Commit
修复任何合并冲突
,如果它们出现并爆发<代码>1XXXX
和2XXXX
从未存在过 您已经推送更改了吗?我想是你干的。在这种情况下,我建议使用git revert
来消除错误提交。这是一个安全的选择
错误的提交仍将在历史记录中可见,但当您的同事已经拉取您的更改时,他们不会遇到问题
如果您还没有推动更改,您可以选择重写Git历史记录,可以使用
Git rebase-i
或Git reset
并重新提交。我通常是Git revert
的粉丝,但是当您的提交是删除时,恢复提交将重新添加该文件,并且您将丢失该文件之前的历史记录。因此,如果您完成了所有这些提交,我将创建另一个分支-重新设置其上所有提交的基础,在错误提交之前将错误的分支重置为提交,然后从辅助分支的顶部挑选好的提交。使用交互式重新基置并挤压它。