如何撤消刚初始化的存储库中的提交(未推送)

时间:2019-03-03 04:51:59

标签: git

我初始化了一个存储库,但现在想undo进行第一次(也是唯一)提交。

这些three solutions用于撤消所有提交错误,因为freshly created repo points to a ref that doesn't exist yet

所以我的问题是如何撤消尚未推送的回购中的提交,因此还没有引用?

注意:我也曾尝试git commit -amend失败

2 个答案:

答案 0 :(得分:1)

如果只有一个要删除的提交,则可以删除记录了提交日志ID的.git/logs/refs/heads/master文件。另外,删除记录了.git/refs/heads/master分支提交的文件master。 您可能还需要删除存储最近提交ID的.git/logs/HEAD文件。 删除这些引用之后,这些对象最终将被垃圾收集。

但是删除整个.git目录并再次删除git init可能更容易,更快捷。

答案 1 :(得分:1)

注意:从技术上讲,这不会撤消提交,但是效果也一样—空的存储库几乎没有任何功能。要真正清空存储库,请参见下文。

git commit --amend应该可以工作。这是一个演示:

$ git init
Initialized empty Git repository in .../.git/
$ echo test changing root commit > README
$ git add README 
$ git commit -m initial
[master (root-commit) 90e83ae] initial
 1 file changed, 1 insertion(+)
 create mode 100644 README
$ echo different readme > README
$ git add README 
$ git commit --amend --no-edit
[master 8e159b1] initial
 Date: Sat Mar 2 21:00:53 2019 -0800
 1 file changed, 1 insertion(+)
 create mode 100644 README
$ git log --all --decorate --oneline --graph
* 8e159b1 (HEAD -> master) initial

请注意,这个新的root提交包含了“不同的自述文件”:

$ git show --pretty=oneline
8e159b1f0d397b31cb1be5168e77ba200269c62a (HEAD -> master) initial
diff --git a/README b/README
new file mode 100644
index 0000000..ef0411a
--- /dev/null
+++ b/README
@@ -0,0 +1 @@
+different readme

如果有不需要的文件,请使用git rm(也许与--cached一起删除)。


如果您确实要删除master分支及其单个提交,然后像往常一样在新的空存储库中位于master分支上,则需要采取一些额外的步骤,至少要使用常规(而非管道)命令。步骤如下:

  1. git branch -m master delete:重命名master分支
  2. git checkout --orphan master:回到不存在的名为master的分支
  3. git branch -D delete:删除不需要的分支
  4. git read-tree --empty:清空当前索引

工作树不受此过程的干扰。