在我尝试进行rebase之前,我知道我的功能分支(GL18)的提交是什么(b7104e0),效果很差。我在Eclipse中查看Git Reflog,它多次列出提交b7104e0。我想将GL18的头重新设置回b7104e0。在重新引用日志中选择哪个b7104e0提交是否重要,或者它们都一样?使用reflog取消git rebase时,选择哪个提交会有影响吗?
回答
使用提交消息,提交作者,提交日期,树形哈希和所有父提交散列来计算git散列,有关详细信息,请参阅this blog post on the anatomy of a Git commit。
这意味着您看到的使用相同散列的每次提交都是完全相同的提交。你可以使用任何这些。实际上,如果您重置,则重置为提交哈希:git reset --hard b7104e0
。
无,但只是为了清楚起见,因为标题和正文乍看问不同的问题,我们拼出来这里明确:
的“真名”的任何承诺(或实际上git中的任何存储库对象)都是它的SHA-1,在这种情况下,它以
b7104e0
开头(但继续追加33个字符)。这个真实名称唯一标识了该对象。在这种情况下,只要更短的版本保持唯一,它可以缩写为更短的。所有其他名称,如分支名称,标签,很特别REF
HEAD
,稍微特别少(但仍特别)ORIG_HEAD
,MERGE_HEAD
,CHERRY_PICK_HEAD
,等等,和(终于 :-)) reflog条目,如[email protected]{3}
或branchname@{1}
,只是表示“真名”SHA-1 ID的方法。当使用git checkout
或重写引用名称的命令时,对此规则有一个特殊的豁免,但通常情况下,名称或reflog条目仅解析为该ID。许多名称可能会解析为单个ID,或者可能只有一个名称解析为ID,但名称通常会解析为ID。
一旦你有了正确的ID,这不要紧,你如何得到它。
只是为了完整性:很明显,如果我们要变化目标名称的SHA-1的ID,例如,移动分公司或写一个新值CHERRY_PICK_HEAD
,我们需要这个名字,而不是它的当前ID。我们需要一个名字的另一个地方是当使用间接(“符号”)引用,例如HEAD
名称ref: refs/heads/master
,以便您将on branch master
作为git status
将它放置。
我们还有一个特殊情况,名称不能解析为任何SHA-1 ID,这就是“尚未出生的分支”,这在最新版本库中最常见,没有任何提交:in这种情况下,您在分支master
上,但refs/heads/master
无法解析为提交ID,因为还没有提交。如果您使用git checkout --orphan
创建一个尚未指向任何SHA-1(它将在下一次提交中获取其初始SHA-1)的新分支,则此特殊情况可以稍后再发生。在这两个古怪的情况下,HEAD
参考存在,但名称分支字面上不存在存在(还)。
- 1. 使用reflog git恢复rebase
- 2. git rebase吃了我的提交!为我翻译'git reflog'输出?
- 3. 使用git rebase编辑提交
- 4. git rebase,提交重复
- 5. Git rebase保存提交者
- 6. git rebase一次提交
- 7. Git rebase:用一次提交修正多个提交
- 8. git pull --rebase丢失了我的提交
- 9. git rebase冲突是由哪个提交造成的
- 10. 使用git:在一个分支中提交的更改会影响'master'
- 11. 如何使用'git rebase'重新编写消息时看到提交的内容?
- 12. Git rebase用于删除远程提交
- 13. git reflog中有空消息的项目
- 14. git撤消推送提交对存储库大小的影响
- 15. 使用git rebase时自动跳过空提交
- 16. git:在我提交了一个rebase命令后,他们提交
- 17. 的Git取消选择互动变基提交是默认
- 18. git会影响我的快递吗?
- 19. 有没有办法用git post-commit hook获取提交的受影响文件?
- 20. Git的选择性提交
- 21. Git在提交后不会影响更改
- 22. 是否有可能从git检索提交reflog
- 23. Git合并有选择地提交
- 24. 撤销git rebase --skip - 在rebase期间重新应用提交
- 25. javascript提交表单时会消失吗?
- 26. OpenPGP签名的git提交如何影响提交大小?
- 27. 为什么git pull --rebase在重放现有提交时失败?
- 28. 使用p4提交时,-j(选择作业)选项在哪里?
- 29. git“rebase”只有外部回购的几个提交?
- 30. git rebase分支后推新提交
如果你的rebase失败了,你也可以运行'git rebase --abort'而不是'git reset'来达到旧状态。 – morxa