调用git checkout之后,无需提交,工作树干净。

4
我想删除我的最后一次提交。我认为使用 git checkout 命令,然后跟上 commit 的哈希值会将当前代码替换为该次提交的代码。但这没有起作用,现在我收到了一条消息,内容是 Nothing to commit, working tree clean。我应该如何消除这个消息并删除我最后一次提交?

git checkout <commit-specifier> 是前端命令,用于将提交提取到暂存区和工作树中。为什么您会期望这会删除提交?(顺便说一下,这是一个真正的问题——似乎有些错误的建议导致了这个结论。)提交不能被完全删除,但在某些(许多)情况下,您可以使用 git reset 来达到想要的效果。 - torek
请查看以下链接:https://dev59.com/E3NA5IYBdhLWcg3whuV_ - Madhu Bhat
@MadhuBhat 我想重置我的代码到最后一次提交,这个提交不应该被删除。 - Elias Dolinsek
那么你只想撤销本地更改而不是上一次提交吗? - Madhu Bhat
我认为我可以继续在一切仍然正常的地方进行,然后提交它。 - Elias Dolinsek
显示剩余3条评论
2个回答

3
通过执行 git checkout <hash> 命令,您进入了所谓的“分离头状态”,简单来说就是您现在并没有在任何分支上。如果您想回到正常分支,请执行以下命令:git checkout <branch name>(其中<branch name>可以是masterdevelophotfix之一,这取决于您如何命名以及使用何种流程来管理开发/发布周期... 可以尝试使用 git branch --list 来获取列表)。
然后,如果您想删除最近的提交,可以执行以下命令:git reset --hard HEAD~1,但是要非常小心 --hard 开关,因为它会物理删除最近的提交,这基本上意味着它无法恢复(我不太记得是否可以通过操作 reflog 在此情况下帮助恢复)。

0
你可能想查看这个StackOverflow问题以获取更多细节,但听起来好像仓库不知道你的本地分支。你需要使用以下命令设置远程仓库: git branch -u <upstream branch> 所以如果你想推送到主分支,使用以下命令: git branch -u origin/master

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接