取消新存储库中的第一次提交

Cancel first commit in new repository

我创建了一个存储库,但是我不小心提交了我根本不想提交的文件。我想取消第一次提交。 git reset HEAD~ 对我不起作用,我得到一个错误:

$ git reset --soft HEAD^
fatal: ambiguous argument 'HEAD^': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

我试图在 Attlasian SourceTree 中做 "reverse commit"。那只是删除了所有文件,但我不想删除它们,所以我又恢复了它。我现在有更多要删除的提交。

我想取消此存储库中的所有提交,然后先添加 .gitignore,然后再添加其他文件。提交只是本地的,我没有推送任何东西。第一次提交中的一些文件绝不能在线推送,因为它们包含机密数据。

删除存储库,重新开始。

由于 repo 包含 "classified data",从轨道上对该站点进行核攻击似乎是最好的。

Git 存储库很便宜,您的本地副本完全包含在 .git 目录中。如果你搞砸了第一次提交,删除 .git 目录(保留你的其他文件)和 git init 一个新的。

同时删除在线存储库并创建一个新的。一个新的在线存储库应该有与您现有的本地存储库连接的说明; git remote add origin 等等。

使用 git reset & git amend

一种更普遍适用的方法是使用git reset。这允许您任意移动分支头。 git reset --hard origin/master 将 return 掌握您的第一次提交(origin/master 恰好指向第一次提交,否则您将使用它的提交 ID)并丢弃后面的提交。 --hard 表示重置暂存区和工作副本(即磁盘上的文件)。

从那里您可以使用 git commit --amend 更改之前的(即第一次)提交。这不会进行新的提交,而是会更改之前的提交。这对于进行更改非常方便,甚至只是修复提交消息中的拼写错误。

看起来您已经推送了您的第一次提交。由于您要更改该提交,因此您将无法 git push。您必须 git push --force 才能覆盖远程存储库中的内容。听起来这就是你想要的。