我初始化了一个存储库,但现在想undo进行第一次(也是唯一)提交。
这些three solutions用于撤消所有提交错误,因为freshly created repo points to a ref that doesn't exist yet
所以我的问题是如何撤消尚未推送的回购中的提交,因此还没有引用?
注意:我也曾尝试git commit -amend
失败
答案 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
分支上,则需要采取一些额外的步骤,至少要使用常规(而非管道)命令。步骤如下:
git branch -m master delete
:重命名master
分支git checkout --orphan master
:回到不存在的名为master
的分支git branch -D delete
:删除不需要的分支git read-tree --empty
:清空当前索引工作树不受此过程的干扰。