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


当前回答

如果您还没有将提交推到任何位置,可以使用gitrebase-i删除该提交。首先,找出提交的时间(大约)有多远。然后执行以下操作:

git rebase -i HEAD~N

~N表示对最后N个提交进行重新基化(N必须是一个数字,例如HEAD~10)。然后,您可以编辑Git提供给您的文件,以删除违规提交。保存该文件后,Git将重写以下所有提交,就像您删除的提交不存在一样。

GitBook中有一个很好的部分,用图片和示例来改变基础。

但是要小心,因为如果你改变了你在其他地方推动的东西,除非你计划进行强制推动,否则需要另一种方法。

其他回答

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 revert GIT_COMMIT_HASH

输入消息解释为什么要回复,然后:

git push  

当您发出gitlog时,您将看到“错误”的提交和还原日志消息。

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

这里有30多个回答者,我将简单介绍适合我的答案

删除.git文件夹可能会导致git存储库出现问题。如果您希望删除所有提交历史记录,但将代码保持在当前状态,则可以按照以下方式进行操作:

结账

git checkout --orphan latest_branch

添加所有文件

git add -A

提交更改

git commit -m "commit message"

删除分支

git branch -D master

将当前分支重命名为主分支

git branch -m master

最后,强制更新存储库

git push -f origin master

PS:这不会保留您以前的提交历史。

强制更改历史记录

假设您不仅希望删除最后一次提交,而且希望删除最后n次提交中的特定提交,请执行以下操作:

gitrebase-i HEAD~<要返回的提交数>,所以如果您想查看最后五次提交,请使用gitrebase-iHEAD~5。

然后在文本编辑器中,将单词pick更改为放置在要删除的每个提交旁边。保存并退出编辑器。瞧!

附加更改历史记录

尝试git-restore<commit hash>。Revert将创建一个新的提交,以撤消指定的提交。