如何删除git中的第一个提交?

时间:2012-06-06 09:14:37

标签: git repository commit git-commit

我很好奇如何删除git中的第一个提交。

在提交任何东西之前有什么修改?此修订版是否有名称或标记?

9 个答案:

答案 0 :(得分:215)

对我来说,最安全的方法是使用update-ref命令:

git update-ref -d HEAD

它将删除指定的引用HEAD,因此它将重置(轻轻地,您不会丢失工作)您当前分支的所有提交

如果你想要的是将第一次提交与第二次提交合并,你可以使用rebase命令:

git rebase -i --root

最后一种方法是创建一个孤立分支,一个具有相同内容但没有任何提交历史记录的分支,并在其上提交新内容:

git checkout --orphan <new-branch-name>

答案 1 :(得分:39)

在第一次提交之前没有任何内容,因为每个提交都引用父提交。这使得第一个提交特殊(孤立提交),因此无法引用先前的“状态”。

因此,如果您想修复提交,您可以简单地git commit --amend:这将修改提交而不创建另一个提交。

如果您只想重新开始,请删除.git存储库,然后使用git init

创建另一个存储库

答案 2 :(得分:7)

签出临时分支:

git checkout --orphan TEMP_BRANCH

添加所有文件:

git add -A

提交更改:

git commit -am&#34;初始提交&#34;

删除旧分支:

git branch -D master

将临时分支重命名为master:

git branch -m master

最后,强制更新到我们的存储库:

git push -f origin master

答案 3 :(得分:5)

您可能只想编辑第一次提交(因为git repo中始终存在第一次提交)。请考虑使用git commit --amend --reset-author而不是通常的git commit --amend

答案 4 :(得分:2)

如果你想保留其他分支,但是例如让master分支重新开始而没有共同的历史记录到其他分支,一个安全的方法来创建一个新的存储库,并推送其中的内容你原来的那个:

cd ..
git init newrepo
cd newrepo
# make some initial commits
git push ../oldrepo master:newmaster

这会在旧存储库中创建newmaster分支,其历史记录与任何其他分支都不常见。当然,您也可以使用master覆盖git push -f

如果要销毁所有分支和所有现有内容,请运行

rm -rf .git/

答案 5 :(得分:2)

您可以采取的另一种方式是:

  1. 结帐到您要保留的分支(例如开发人员)git checkout dev
  2. 现在,删除要重置的分支git branch -D master
  3. 现在,创建一个名为git checkout --orphan master
  4. 的空分支

    当然,所有这些都取决于你的用例,但如果你有多个分支,删除.git目录是没有意义的。

答案 6 :(得分:0)

If you have just committed it but not pushed it then just remove .git directory and window.removeEventListener('resize', this.resize()) again...

答案 7 :(得分:0)

问题的答案取决于是否:

  • 您要删除分支上的第一个且仅提交(仅保留其他分支),或者是否删除

  • 您要删除某个分支上的第一个提交,同时“保留”后续的提交(和其他分支)。

第二个相对简单。从本质上讲,您必须扎根-多数答案都与执行此操作的方法有关。

执行第二个操作(从一个分支中删除第一个并且是唯一的提交,同时不留其他分支)是很难的。或者,至少,如果您希望它发生并且使更改反映回GitHub或Bitbucket,则尤其困难。 (据我所知)Git中根本没有办法推送或强制推送没有提交的分支。而且(据我所知)根本没有办法在GitHub或Bitbucket中创建没有提交的新的空分支。因此,您基本上必须创建一个新的存储库才能创建一个完全空的分支,然后根据@ user1338062的答案重新添加所需的分支(包括所需的提交)。

因此,我希望这个答案可以澄清可能不太明显的问题-对于两种不同的情况,您都需要采用两种不同的方法,这两种情况都是可能希望能够做到,以便完全掌握OP的要求。

答案 8 :(得分:0)

我一直在寻找一种方法来撤消回购中的所有git提交,就像它们从未发生过一样。

重新安装到一定程度。但是,第一个(按时间顺序最早的git commit)总是会出现问题,因为它没有父项,因此会出错。

这些答案都没有为我解决。但是经过大量搜索和反复试验之后,我发现它可以正常工作!

git update-ref -d HEAD
git push origin master -f

希望这对您有所帮助。祝你有美好的一天。