【问题标题】:How can I move a commit to the staging area when only one commit exists?当仅存在一个提交时,如何将提交移动到暂存区域?
【发布时间】:2015-08-08 10:06:32
【问题描述】:

我有一个 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~1 和HEAD^ 导致致命错误,我在输入git reset &lt;SHA-1 of commit&gt; 时没有结果,并且不会删除第一个提交。这有什么问题?这是错误吗?

【问题讨论】:

  • 我尊重您作为 Git 外科医生的职业。这是我的 git 存储库:github.com/gtchoi/guestbook_2015。你可以试试这个
  • 如果只有一个提交并且您想重置它。为什么不直接用内容创建一个新的 repo?只需删除.git 目录并再次执行git init
  • 根据我的理解,您所问的是不可能的,将 git repo 视为时间线,您正在尝试回到不存在的时间。只需创建新的时间线。
  • git reset HEAD~1 会起作用,但更重要的是,您到底想完成什么?你想重写提交历史吗?

标签: git git-reset


【解决方案1】:

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

根据 Git 的语法,HEAD^(或 HEAD~1) 指的是提交对象,它是在当前分支中完成的第二个最后提交。就您而言,这根本不存在。因此,错误是预期的,而不是错误。

现在,谈到您的问题,让我们看看我们如何才能挽救局面:

git reset --soft

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

您可以通过运行恢复提交,而不是删除:

git 还原

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

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

在您的项目目录中进行任何您在第一次提交中可能错过的更改。然后将所有这些更改添加到暂存区。

git add --all

然后运行:

git commit --amend -m "第一次提交"

您没有替换历史记录中的那个提交对象。通过运行查看:

git log --oneline

【讨论】:

    猜你喜欢
    • 2011-11-05
    • 2012-06-06
    • 2021-03-12
    • 2018-02-05
    • 2020-01-11
    • 1970-01-01
    • 2012-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多