如何从分支历史记录中删除提交?我应该使用git reset-hard HEAD吗?


当前回答

假设我们要从回购中删除提交2和4。(数字越高,提交越新;0是最早的提交,4是最新的提交)

commit 0 : b3d92c5
commit 1 : 2c6a45b
commit 2 : <any_hash>
commit 3 : 77b9b82
commit 4 : <any_hash>

注意:您需要对回购拥有管理权限,因为您使用的是--hard和-f。

gitcheckout b3d92c5签出最后一个可用的提交。gitcheckout-b repair创建一个新的分支来处理。git cherry pick 77b9b82运行提交3。git cherry pick 2c6a45b运行提交1。git checkout master checkout master。git reset--hard b3d92c5将主机重置为上次可用提交。gitmerge修复将我们的新分支合并到master上。git push-f origin master将master推送到远程存储库。

其他回答

#[快速回答]

您有许多选择,例如:

备选方案1:git rebase-i<YourCommitId>~1将YourCommitId更改为要还原回的提交次数。备选方案2:git reset--硬YourCommitIdgit push<origin><branch>--force将YourCommitId更改为要还原回的提交次数。我不建议使用此选项,因为您可能会丢失正在进行的工作。备选方案3:git reset—软HEAD~1你可以保留你的工作,只撤销承诺。

git reset --hard commitId

git push <origin> <branch> --force

PS:CommitId指的是要还原回的那个

git rebase -i HEAD~2

这里“2”是您要重新设置基准的提交次数。

'git rebase -i HEAD`

如果您想重新设置所有提交的基础。

然后,您可以选择其中一个选项。

p、 pick=使用提交

r, reword = use commit, but edit the commit message
e, edit = use commit, but stop for amending
s, squash = use commit, but meld into previous commit
f, fixup = like "squash", but discard this commit's log message
x, exec = run command (the rest of the line) using shell
d, drop = remove commit

这些线路可以重新订购;它们是从上到下执行的。如果您删除此处的一行,则承诺将丢失。但是,如果您删除了所有内容,则重新启动将被中止。注意,空提交被注释掉

您只需使用选项“d”或删除包含您提交的行即可删除该提交。

git reset—软Id提交允许您删除提交,但不删除当前文件。然后使用git push-f源名称分支

另一种可能是我个人最喜欢的命令之一:

git rebase -i <commit>~1

这将在您要执行的提交之前以交互模式-i启动重新启动。编辑器将开始列出此后的所有提交。删除包含要删除的提交的行并保存文件。Rebase将完成剩下的工作,只删除该提交,并将所有其他提交重新播放到日志中。