我很好奇如何删除git中的第一次提交。
提交任何内容之前的修订版本是什么?此修订版是否有名称或标签?
git rebase -i --root
。请参阅下面的SO答案细节:stackoverflow.com/questions/2246208/...
git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
我很好奇如何删除git中的第一次提交。
提交任何内容之前的修订版本是什么?此修订版是否有名称或标签?
git rebase -i --root
。请参阅下面的SO答案细节:stackoverflow.com/questions/2246208/...
git filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
Answers:
对我来说,最安全的方法是使用以下update-ref
命令:
git update-ref -d HEAD
它将删除命名的引用HEAD
,因此它将重置(轻轻地,您不会丢失您的工作)对当前分支的所有提交。
如果要合并第一个提交和第二个提交,可以使用以下rebase
命令:
git rebase -i --root
最后一种方法是创建一个孤立分支,该分支具有相同的内容但没有任何提交历史记录,并在其上提交新内容:
git checkout --orphan <new-branch-name>
第一次提交之前没有任何内容,因为每个提交都引用父提交。这使得第一次提交变得特别(孤立提交),因此无法引用先前的“状态”。
因此,如果您要修复提交,可以简单地进行以下操作git commit --amend
:这将修改提交而不创建另一个提交。
如果您只想重新开始,请删除.git
存储库,然后使用git init
--amend
也不会更新如果适当它最初配置不正确的作者。那就是我所需要的,所以我使用了可接受的答案,然后又做了一个新的提交。
# Check out to a temporary branch:
git checkout --orphan TEMP_BRANCH
# Add all the files:
git add -A
# Commit the changes:
git commit -am "Initial commit"
# Delete the old branch:
git branch -D master
# Rename the temporary branch to master:
git branch -m master
# Finally, force update to our repository:
git push -f origin master
您可能只想编辑第一次提交(因为git repo中总是存在第一次提交)。考虑使用git commit --amend --reset-author
代替通常的git commit --amend
。
您可以做的另一种方法是:
git checkout dev
git branch -D master
git checkout --orphan master
当然,所有这些都取决于您的用例,但是如果您有多个分支,则删除.git
目录是没有意义的。
如果要保留其他分支,但是例如使该master
分支重新启动而没有其他分支的共同历史记录,则实现此目的的一种安全方法是创建一个新的存储库,并将其内容推送到旧的存储库中:
cd ..
git init newrepo
cd newrepo
# make some initial commits
git push ../oldrepo master:newmaster
这newmaster
将在旧存储库中创建分支,其历史记录与其他分支都不相同。当然,你可以覆盖master
为好,有git push -f
。
如果要销毁所有分支和所有现有内容,则只需运行
rm -rf .git/
git rebase --root
这可能是OP想要的,但是考虑到这个答案有两个反对意见,如果有人仍然认为它有意义,我将避免删除它。
如果您刚刚提交但未推送,则只需删除.git目录,然后git init
再次...
问题的答案取决于是否:
您想删除分支上的第一个且仅提交(仅保留其他分支不变),或者是否要删除
您想删除某个分支上的第一个提交,同时“保留”后续的提交(和其他分支)。
第二个相对简单。从本质上讲,您必须扎根-此处的大多数答案都是关于执行此操作的方法。
要执行第二个操作(从一个分支中删除第一个也是唯一的提交,而让其他分支保持单独状态)则比较困难。或者,至少,如果您希望它发生并且使更改反映回GitHub或Bitbucket,则尤其困难。(据我所知)Git中根本没有办法推送或强制推送没有提交的分支。而且(据我所知)也完全没有办法在GitHub或Bitbucket中创建一个没有提交的新的空分支。因此,您基本上必须创建一个新的存储库才能创建一个完全空的分支,然后按照@ user1338062的答案重新添加所需的分支(包括所需的提交)。
因此,我希望这个答案能弄清楚可能不是很明显的东西-对于两种不同(或多或少合理)的场景,需要采取两种不同的方法,这两种方法都是您可能想做的,以便完全掌握OP的要求。