如何取消提交我在 git 中的最后一次提交?
是吗
git reset --hard HEAD
或者
git reset --hard HEAD^
?
如果您不完全确定“取消提交”是什么意思并且不知道是否要使用git reset
,请参阅“恢复到以前的 Git 提交”。
如果您想git reset
更好地理解,请参阅“您能用简单的英语解释一下“git reset”的作用吗? ”。
如果您知道要使用git reset
,这仍然取决于“取消提交”的含义。如果您只想撤消提交的行为,保持其他所有内容不变,请使用:
git reset --soft HEAD^
如果您想撤消提交行为和您上演的所有内容,但保持工作树(您的文件)完好无损:
git reset HEAD^
如果您真的想完全撤消它,丢弃所有未提交的更改,将所有内容重置为上一次提交(如原始问题所问):
git reset --hard HEAD^
原来的问题也问它HEAD^
不是HEAD
。HEAD
指当前提交 - 通常是当前签出分支的尖端。这^
是一个可以附加到任何提交说明符的符号,意思是“之前的提交”。所以,HEAD^
是当前提交之前的提交,就像master^
主分支尖端之前的提交一样。
这是git-rev-parse 文档的一部分,描述了指定提交的所有方法(^
只是众多方法中的一种)。
git reset --soft HEAD^
将修改后的更改保留在您的工作树中。
git reset --hard HEAD^
将丢弃您所做的更改!
要保留要撤消的提交中的更改
git reset --soft HEAD^
从要撤消的提交中销毁更改
git reset --hard HEAD^
你也可以说
git reset --soft HEAD~2
返回 2 个提交。
编辑:正如 charsi 所提到的,如果您在 Windows 上,则需要将 HEAD 或提交哈希放在引号中。
git reset --soft "HEAD^"
git reset --soft "asdf"
当心 ! reset --hard
也会删除您的本地(未提交)修改。
git reset --hard HEAD^
注意:如果你在 Windows 上,你需要引用 HEAD^ 所以
git reset --hard "HEAD^"
如果您想在不放弃工作的情况下恢复提交,请使用--soft标志而不是 --hard
git reset --soft HEAD^
请注意 - 如果您使用的是 ZSH 并看到错误
zsh: no matches found: HEAD^
你需要逃避^
git reset --soft HEAD\^
如果你提交到错误的分支
在错误的分支上:
git log -2
给你最后一次提交的哈希值,假设$prev
和$last
git checkout $prev
签出正确的提交git checkout -b new-feature-branch
为该功能创建一个新分支git cherry-pick $last
用您的更改修补分支然后,您可以按照上面建议的方法之一从第一个分支中删除您的提交。
如果您尚未推送更改,请使用git reset --soft [Hash for one commit]
回滚到特定提交。--soft
告诉 git 保持回滚的更改(即,将文件标记为已修改)。--hard
告诉 git 删除正在回滚的更改。
小心点。
但是你可以使用 rebase 命令
git rebase -i HEAD~2
Avi
将打开,您所要做的就是删除带有提交的行。还可以阅读正确版本 @ 中显示的说明vi
。在此模式下可以执行几件事。