当只有一个提交存在时,如何将提交移动到暂存区域?

时间:2015-08-08 10:06:32

标签: git git-reset

我有一个Git存储库,其中只有一个提交存在。我想把这个提交移到临时区域。已知命令是git reset --soft。所以我输入了类似的东西:

$ git --version
git version 2.3.2 (Apple Git-55)
$ git log
commit 2d70c0de8824967378da348afa7be6eca9839dcc
Author: gtchoi <gtchoi@nhnent.com>
Date:   Sat Aug 8 18:54:25 2015 +0900
    the first commit.
$ git reset --soft HEAD~1
fatal: ambiguous argument 'HEAD~1': unknown revision or path not in the working tree.
$ git reset --soft HEAD^
fatal: ambiguous argument 'HEAD^': unknown revision or path not in the working tree.
$ git reset --soft 2d70c0de8824967378da348afa7be6eca9839dcc
$ git log
commit 2d70c0de8824967378da348afa7be6eca9839dcc
Author: gtchoi <gtchoi@nhnent.com>
Date:   Sat Aug 8 18:54:25 2015 +0900

    the first commit.

参数HEAD~1HEAD^导致致命错误,输入git reset <SHA-1 of commit>时没有结果,第一次提交不会被删除。这有什么问题?这个错误吗?

1 个答案:

答案 0 :(得分:0)

在Git中, HEAD 是对最新提交的引用(指向最近签出的提交对象的指针)。因此,在您的情况下, HEAD 是指您的唯一提交。

根据Git的语法, HEAD ^(或HEAD~1)指的是提交对象,它是当前分支中第二次完成提交。在你的情况下,这根本不存在。因此错误是预期的,而不是错误。

现在,谈谈你的问题,让我们看看我们如何能够解决这个问题:

  

git reset --soft

这只会重置HEAD指针。这不会删除提交,也不会破坏分支和提交对象之间的连接。

您可以通过运行:

来恢复提交,而不是删除
  

git revert

正如预期的那样,这只会添加另一个恢复更改的提交。很可能这不是你想要的。

做你想做的事的简单(和干净)方式是:

在项目目录中进行任何更改,您可能在第一次提交时遗漏了这些更改。然后将所有这些更改添加到暂存区域。

  

git add --all

并运行:

  

git commit --amend -m“第一次提交”

您没有在历史记录中替换该提交对象。请参阅运行:

  

git log --oneline