如何撤消新初始化存储库中的提交(未推送)[重复]

Posted

技术标签:

【中文标题】如何撤消新初始化存储库中的提交(未推送)[重复]【英文标题】:How to undo a commit in freshly initialized repository (not pushed) [duplicate] 【发布时间】:2019-07-24 17:28:45 【问题描述】:

我初始化了一个 repo,但现在想undo 第一个(也是唯一的)提交。

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

所以我的问题是如何撤消尚未推送且尚未获得 ref 的 repo 中的提交?

注意:我也试过git commit -amend没有成功

【问题讨论】:

【参考方案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

请注意,“不同的 README”是这个新根提交的内容:

$ 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:清空当前索引

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

【讨论】:

【参考方案2】:

如果您只想删除一个提交,您可以删除记录提交日志 ID 的 .git/logs/refs/heads/master 文件。同时删除记录master 分支提交的文件.git/refs/heads/master。 您可能还想删除存储最后提交 ID 的 .git/logs/HEAD 文件。 删除这些引用后,这些对象最终将被垃圾回收。

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

【讨论】:

以上是关于如何撤消新初始化存储库中的提交(未推送)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何撤消 Github 中的先前提交 [重复]

你如何只推送新的提交[重复]

如何重新创作 Git 存储库中的所有提交? [复制]

我可以撤消 GitHub 存储库中重置的提交吗? [复制]

如何使用其他用户凭据撤消对 GitHub 的意外推送

如何转换 git 存储库中的大量提交 [重复]