如何“重新打开”最后一个git提交?

时间:2015-04-09 00:17:07

标签: git

我在一个分支机构工作,需要重新掌握主人才能快速修复,所以我的工作正在进行中。

现在我回到了我的分支机构,我想回到我尚未提交的状态,但我的所有更改都已应用并准备好提交(即取消之前的提交,但我的更改不会丢失,它们显示在git status)中。

修改之前的提交对我来说不够好,因为我想看到更改的文件和行(这样可以更容易地处理我的更改)。

我知道git stash本来是一个更好的解决方案,但为时已晚。我也倾向于混淆(或松散)我的藏匿提交,因为它们没有链接到分支。

3 个答案:

答案 0 :(得分:22)

基本上有两种解决方法:

  1. 执行重置(在master分支上,或虚假提交的任何分支):

    git reset --soft HEAD~1
    

    HEAD~1是相对地址,如here所述。

  2. 继续工作并执行修正:

    git commit --amend
    

    在这种情况下,你假装没有发生任何事情,在你的分支上进一步工作并在你计划进行真正的提交时调用命令。您可以覆盖上次提交所有更改和(可选)新消息。

  3. pro forma :确实 - 正如你自己提到的 - 更好地执行git stash,只对那些偶然看到这个答案的人说,并认为上面是常规练习(事实并非如此)。

答案 1 :(得分:6)

根据我的理解,您希望撤消对分支的最新提交,同时保持提交中的所有更改完整并暂存。

您可能想尝试使用下面列出的git reset命令:

git reset --soft HEAD^

这应该采取你最新的提交并撤消它,同时保持所有的更改上演。

答案 2 :(得分:3)

您应该使用git reset HEAD~1(没有--hard选项)

它会完全按照你的意愿行事,HEAD~1在这里意味着你要重置一个提交,从历史的头部(顶部)算起。

这不会触及文件系统上的任何文件,因此git现在会将您编辑的文件视为已更改但未提交。