如何在Git中回退到第一个提交?

7

reset命令中是否有类似于--root标志在rebase命令中的等效选项?

git reset --root

假设我要将当前分支重置为第一个提交:我是否需要手动查找历史记录并找到该提交的哈希值,还是有一种简单的方法可以重置到第一个可用的提交?


似乎在while循环中运行git reset HEAD^看起来很傻。 - IQAndreas
这些对你有帮助吗:https://dev59.com/32Ml5IYBdhLWcg3wbGh1 和 https://dev59.com/LHI_5IYBdhLWcg3wF_F3 - Henrik Andersson
@limelights,不完全是同一件事,我正在寻找的是完全第一个提交,而不是自分支与其他分支分叉以来的第一个提交。 - IQAndreas
@limelights 不过,使用 rev-list 可能是答案(尽管参数需要进行大量调整),所以这些链接是有帮助的,虽然并不完全相关。 - IQAndreas
1
太好了,它们旨在指引正确的方向 :) - Henrik Andersson
3个回答

5

根提交(可以有多个)是没有父级的提交。

这将找到当前提交的根提交(基本上,是“当前分支的根”,但即使使用分离的HEAD也可以工作):

git rev-list --max-parents=0 HEAD

这会找到所有分支上的根提交:

git rev-list --max-parents=0 --branches

当然你可以使用--tags--all代替--branches

通常存储库中只有一个根,因此所有这些都会找到相同的版本,而rev-list默认以适当的顺序打印修订版,所以manojlds' answer通常也可以工作。

编辑:当然,你必须向git reset提供结果SHA-1。


2
这是一种方式:
git reset --hard `git rev-list --all | tail -1`

1
这可能会在多根存储库(例如git的自己的git存储库)中选择错误的根。 (注意:它实际上在那里运行,至少如果您在任何正常的源链上; 或者对我来说是这样的。所有其他树的根在主树的根之前出现。) - torek

1

我没有在git reset中找到方法,但您可以使用以下一行代码将存储库重置为初始提交:

git log --pretty=format:%H | tail -1 | xargs git reset

基本上使用 git log 找到第一个提交,然后使用 xargs 可以将其重置回去。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接