我在一个分支机构工作,需要重新掌握主人才能快速修复,所以我的工作正在进行中。
现在我回到了我的分支机构,我想回到我尚未提交的状态,但我的所有更改都已应用并准备好提交(即取消之前的提交,但我的更改不会丢失,它们显示在git status
)中。
修改之前的提交对我来说不够好,因为我想看到更改的文件和行(这样可以更容易地处理我的更改)。
我知道git stash本来是一个更好的解决方案,但为时已晚。我也倾向于混淆(或松散)我的藏匿提交,因为它们没有链接到分支。
答案 0 :(得分:22)
基本上有两种解决方法:
执行重置(在master
分支上,或虚假提交的任何分支):
git reset --soft HEAD~1
HEAD~1
是相对地址,如here所述。
继续工作并执行修正:
git commit --amend
在这种情况下,你假装没有发生任何事情,在你的分支上进一步工作并在你计划进行真正的提交时调用命令。您可以覆盖上次提交所有更改和(可选)新消息。
pro forma :确实 - 正如你自己提到的 - 更好地执行git stash
,只对那些偶然看到这个答案的人说,并认为上面是常规练习(事实并非如此)。
答案 1 :(得分:6)
根据我的理解,您希望撤消对分支的最新提交,同时保持提交中的所有更改完整并暂存。
您可能想尝试使用下面列出的git reset命令:
git reset --soft HEAD^
这应该采取你最新的提交并撤消它,同时保持所有的更改上演。
答案 2 :(得分:3)
您应该使用git reset HEAD~1
(没有--hard
选项)
它会完全按照你的意愿行事,HEAD~1在这里意味着你要重置一个提交,从历史的头部(顶部)算起。
这不会触及文件系统上的任何文件,因此git现在会将您编辑的文件视为已更改但未提交。