如何在Git中取消提交我的最后一次提交[duplicate]

dfuffjeb  于 2023-05-05  发布在  Git
关注(0)|答案(8)|浏览(169)

此问题已在此处有答案

How do I undo the most recent local commits in Git?(105答案)
6年前关闭。
如何在git中取消提交我的最后一次提交?
是吗

git reset --hard HEAD

git reset --hard HEAD^

bgibtngc

bgibtngc1#

如果你不完全确定“uncommit”是什么意思,也不知道是否要使用git reset,请参阅“Revert to a previous Git commit”。
如果您想更好地理解git reset,请参阅“Can you explain what "git reset" does in plain English?”。
如果你知道你想使用git reset,它仍然取决于你所指的“uncommit”。如果你想做的只是撤销提交的行为,而不改变其他所有内容,那么用途:

git reset --soft HEAD^

如果你想撤销提交的行为和你暂存的所有东西,但保持工作树(你的文件)不变:

git reset HEAD^

如果你真的想 * 完全 * 撤销它,丢弃所有未提交的更改,将所有内容重置为上一次提交(正如最初的问题所问的那样):

git reset --hard HEAD^

原来的问题也问它是HEAD^而不是HEADHEAD指的是当前提交-通常是当前 checkout 分支的顶端。^是一个可以附加到 any commit说明符的符号,意思是“之前的提交”。因此,HEAD^是当前提交之前的提交,就像master^是master分支尖端之前的提交一样。
下面是git-rev-parse documentation的一部分,描述了所有指定提交的方法(^只是许多方法中的一种)。

hmae6n7t

hmae6n7t2#

git reset --soft HEAD^将在工作树中保留修改后的更改。
git reset --hard HEAD^将放弃您所做的更改!!!

bpzcxfmw

bpzcxfmw3#

保留要撤消的提交中的更改

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"
nkkqxpd9

nkkqxpd94#

如果你想恢复提交 * 而不 * 丢弃工作,使用--soft标志而不是--hard

git reset --soft HEAD^

小心!reset --hard也会删除你的本地(未提交)修改。

git reset --hard HEAD^

注意:如果你是在Windows上,你需要引用HEAD^所以

git reset --hard "HEAD^"
q3aa0525

q3aa05255#

只是一个注意-如果您使用ZSH并看到错误

zsh: no matches found: HEAD^

你需要逃离^

git reset --soft HEAD\^
wvmv3b1j

wvmv3b1j6#

如果提交到错误的分支

在错误的分支上:

  1. git log -2给出了最近2次提交的哈希值,比如$prev$last
  2. git checkout $prev检出正确提交
  3. git checkout -b new-feature-branch为要素创建新分支
  4. git cherry-pick $last使用您的更改修补分支
    然后你可以按照上面建议的方法之一从第一个分支中删除你的提交。
sg2wtvxw

sg2wtvxw7#

如果你还没有推送你的修改,使用git reset --soft [Hash for one commit]回滚到一个特定的提交。--soft告诉git保留回滚的更改(即,将文件标记为已修改)。--hard告诉git删除正在回滚的更改。

vdzxcuhz

vdzxcuhz8#

小心点
但是可以使用rebase命令

git rebase -i HEAD~2

一个vi将打开,你所要做的就是删除提交的那一行。还可以阅读正确版本@vi中显示的说明。在此模式下可以执行几项操作。

相关问题