我很想知道如何在Git中删除第一个提交。
在提交任何内容之前的版本是什么?这个版本有一个名称或标签吗?
我很想知道如何在Git中删除第一个提交。
在提交任何内容之前的版本是什么?这个版本有一个名称或标签吗?
对我来说,最安全的方法是使用update-ref
命令:
git update-ref -d HEAD
它将删除名为HEAD
的引用,因此它将重置(轻松地,您不会失去工作)当前分支上的所有提交。
如果您想要将第一个提交与第二个提交合并,可以使用rebase
命令:
git rebase -i --root
最后一种方法是创建一个孤立分支(orphan branch),即一个与其他分支相同但没有任何提交历史记录的分支,并在上面提交您的新内容:
git checkout --orphan <new-branch-name>
git update-ref -d HEAD
后,我再也无法推送任何东西了。 - TanguyP第一个提交之前没有任何内容,因为每个提交都是指向父提交的。这使得第一个提交很特殊(一个孤儿提交),所以无法引用先前的“状态”。
如果您想修复提交,可以简单地使用git commit --amend
:这将修改提交而不创建另一个提交。
如果您想重新开始,请删除.git
仓库,并使用git init
创建另一个仓库。
--amend
也无法正确更新作者。这就是我需要的,所以我使用了被接受的答案,然后只是创建了一个新的提交。 - Mark Edington# 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提交,就像它们从未发生过一样。
在某种程度上,变基可行。然而,最早(按时间顺序最古老的Git提交)总是会有问题,因为它没有父级,所以会出错。
这些答案都没有完全解决我的问题。但是经过大量搜索和试错,我发现这个方法很有效!
git update-ref -d HEAD
git push origin master -f
希望这能帮到你。祝你有美好的一天。您可能只想编辑第一个提交(因为 git 存储库中总是有第一个提交)。考虑使用 git commit --amend --reset-author
而不是通常的 git commit --amend
。
git checkout dev
git branch -D master
git checkout --orphan master
.git
目录就没有意义了。git push -f
命令来强制更新远程分支。 - Radon8472master
分支重新开始而不与其他分支共享历史记录,则实现此目的的一种安全方法是创建一个新存储库,并将其内容推送到旧存储库中:cd ..
git init newrepo
cd newrepo
# make some initial commits
git push ../oldrepo master:newmaster
newmaster
的新分支,其历史记录与任何其他分支都不相同。当然,您也可以使用git push -f
覆盖master
。rm -rf .git/
git rebase --root
可能是 OP 想要的,但考虑到这个回答已经有两个赞,我会避免删除它,以防某人仍然认为它相关。 - user1338062git init
即可...这里的所有答案都没有做到我从问题中隐含理解的事情(也是我个人需要做的),即如何删除第一个提交但保留其余历史记录。
以下是我是如何做到的(受@Mega Sahu答案的启发):
创建整个repo的备份。
使用switch切换到临时分支,使其完全为空:
git switch --orphan TMP_BRANCH
touch tmp
git add tmp
git commit -m "initial "
gitk
为了保险起见,在挑选完提交后,请与您创建的备份进行比较,以确保一切就位。
删除旧分支:
git branch -D master
git branch -m master
git commit --amend
来合并暂存的更改并修改最近的提交,即第一个提交。修改后的提交将成为一个新的提交,并拥有自己的引用。# stage the new changes which will replace previous commit
git add my_file.py
# commit and change message
git commit --amend -m "Updating first and only commit"
# or commit without changing the message
git commit --amend --no-edit
如果没有新的内容被提交,那么它只是编辑之前提交的信息。
git rebase -i --root
命令。详细信息请参考以下 Stack Overflow 回答:https://dev59.com/pXE95IYBdhLWcg3wlu6z - MKroehnertgit filter-branch --parent-filter "sed 's/-p <the_commit>//'" HEAD
。 - Jody Bruchon