在我的一个开发分支中,我对我的代码库进行了一些更改。在我能够完成我正在开发的功能之前,我必须将我当前的分支切换到 master 来演示一些功能。但是仅使用“git checkout master”就保留了我在开发分支中所做的更改,从而破坏了 master 中的一些功能。所以我所做的是在我的开发分支上提交更改,并使用提交消息“临时提交”,然后为演示签出 master。
现在我已经完成了演示并回到我的开发分支上工作,我想删除我所做的“临时提交”,同时仍然保留我所做的更改。那可能吗?
就这么简单:
git reset HEAD^
注意:某些 shell 将^其视为特殊字符(例如某些 Windows shell 或启用了 globbing 的 ZSH),因此您可能必须在这些情况下引用"HEAD^"或使用。HEAD~1
^
"HEAD^"
HEAD~1
git reset没有--hard或--soft移动你HEAD指向指定的提交,而不更改任何文件。HEAD^指您当前提交的(第一个)父提交,在您的情况下是临时提交之前的提交。
git reset
--hard
--soft
HEAD
HEAD^
请注意,另一个选项是照常进行,然后在下一个提交点运行:
git commit --amend [-m … etc]
它将改为编辑最近的提交,具有与上述相同的效果。
请注意,如果您已经将错误的提交推送到其他人可能已将其拉出的地方,这(与几乎所有 git 答案一样)可能会导致问题。尽量避免这种情况