我最近创建了一个新分支,我们称之为“branch1”,它基于另一个分支,让我们称之为“master”。然后我向branch1提交了一堆提交,现在我已经意识到前几次提交实际上是一个错误,但是在前几个提交之后仍然是很棒的提交!所以我在这里尝试做的基本上就是删除那些前几次提交,以便后面的那些提交基本上得到主人的重新定位......怎么会这样做?
答案 0 :(得分:3)
您最好的选择可能是使用git revert
(文档here)进行您要取消的提交。
关于它的3个注释:
git reset
,它会将您带回到您感兴趣的位置,可能会撤消所有提交的提交master
分支之前,您可以使用branch1
在git reset --soft <initial commit in branch1>
中压缩您的提交,然后按git commit -m <your commit message>
重新进行所有更改。答案 1 :(得分:2)
说这是您从最新到最早的提交历史记录:
branch1
5XXXX Good Commit
4XXXX Good Commit
3XXXX Good Commit
2XXXX Bad Commit
1XXXX Bad Commit
所以,假设您想要仅删除1XXXX
和2XXXX
中的代码,并且不关心提交是保留还是继续。因此,您现在可以:
git revert 1XXXX
这使得新提交的消息类似于reverts 1XXXX
然后,
git revert 2XXXX
这使得新提交的消息类似于reverts 2XXXX
您现在有两个新的提交可以还原1XXXX
和2XXXX
。只需推动它们......
git push origin branch1
因此,您的提交现在将是:
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 --interactive 1XXXX
因此,在同一个分支branch1
上,您现在正在对第一个错误提交1XXXX
进行重组。现在,您将看到一个类似于:
pick 5XXXX Good Commit
pick 4XXXX Good Commit
pick 3XXXX Good Commit
pick 2XXXX Bad Commit
pick 1XXXX Bad Commit
将pick
的{{1}}更改为Bad Commits
。
squash
修复任何pick 5XXXX Good Commit
pick 4XXXX Good Commit
pick 3XXXX Good Commit
squash 2XXXX Bad Commit
squash 1XXXX Bad Commit
如果它们出现并且BOOM! merge conflicts
和1XXXX
从未存在!!
答案 2 :(得分:0)
您是否已经推动了更改?我假设你做到了。在这种情况下,我建议使用git revert
来消除不良提交。这是安全的选择。
错误提交仍会在历史记录中显示,但是当他们已经撤消您的更改时,您的同事不会遇到问题。
如果您尚未推送更改,则可以选择使用git rebase -i
或git reset
重写Git历史记录,然后重新发送。
答案 3 :(得分:0)
我通常是git revert
的支持者,但是当您的提交是删除的提交时,还原提交将重新添加它,并且您将失去之前该文件的历史记录。因此,如果您已完成所有这些提交,则我将创建另一个分支-将所有提交重新置于其上,在错误的提交之前将错误的分支重置回该提交,然后从顶部选择最佳的提交。辅助分支。