【问题标题】:Reset to the very first commit in Git?重置为 Git 中的第一次提交?
【发布时间】:2014-07-07 19:46:54
【问题描述】:

对于reset 命令,是否有与rebase 命令中的--root 标志等效的东西?

git reset --root

假设我想重置到当前分支中的第一个提交:我是否必须手动挖掘历史并找到该提交的哈希,或者是否有一种简单的方法可以重置到第一个可用提交?

【问题讨论】:

  • while 循环中运行git reset HEAD^ 似乎很愚蠢。
  • @limelights 不完全一样,我正在寻找完全的第一次提交,而不是因为分支与其他分支分歧的第一次提交。
  • @limelights 但是,使用rev-list 可能是答案(尽管需要对参数进行很大调整),因此链接很有帮助,尽管不是正确的主题。
  • 太棒了,它们是指向正确方向的指针:)

标签: git


【解决方案1】:

这是一种方式:

git reset --hard `git rev-list --all | tail -1`

【讨论】:

  • 这可能会在多根存储库(例如 git 自己的 git 存储库)中选择错误的根。 (注意:它实际上在那里工作,至少如果你在任何正常的源链上;或者为我做了。所有其他树的根都在主树的根之前出现。)
【解决方案2】:

我在 git reset 中没有找到方法,但您可以使用以下单行代码重置为 repo 的初始提交:

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

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

【讨论】:

    【解决方案3】:

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

    这会找到当前提交的根提交(基本上是“当前分支的根”,但它甚至可以使用分离的 HEAD):

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

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

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

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

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

    编辑:当然,您必须将生成的 SHA-1 提供给git reset

    【讨论】:

      猜你喜欢
      • 2020-06-12
      • 2021-08-12
      • 2020-09-06
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 2012-07-11
      相关资源
      最近更新 更多