【发布时间】:2017-03-02 16:05:54
【问题描述】:
我在 master 分支的 git 存储库中工作。最近我从远程拉了更新分支。 有什么方法可以查明,在我拉之前哪个 commit-ID 是 master 的 HEAD?
【问题讨论】:
-
运行
git reflog master,你会发现一些线索。 -
太棒了,谢谢@ElpieKay。将其发布为答案,以便我接受。
我在 master 分支的 git 存储库中工作。最近我从远程拉了更新分支。 有什么方法可以查明,在我拉之前哪个 commit-ID 是 master 的 HEAD?
【问题讨论】:
git reflog master,你会发现一些线索。
git reflog 解决了我的问题,正如@ElpieKay 在a comment 中所建议的那样
【讨论】:
在拉取后没有更改分支的简单情况下,您可以使用 master@{1} 或 main@{1} 引用,例如git log -1 master@{1}.
【讨论】:
如果你在拉取后没有合并任何东西,你可以使用
git log -1 --merges
这将打印带有格式的最新合并提交
commit <merge-commit-hash>
Merge: <first-parent-hash> <second-parent-hash> ...
Author: ...
Date: ...
第二行(以“Merge”开头的那一行)列出了该合并提交的父级。第一个 (<first-parent-hash>) 是合并前 HEAD 指向的提交的哈希值。
换句话说,当您输入git pull 时,您已签出<first-parent-hash>。
编辑
限制:正如jacob-krall 指出的那样,如果merge(作为pull 的一部分执行)解决为快进,这不会显示HEAD 在哪里,因为这样的合并不会创建提交对象。
【讨论】:
HEAD 是什么?”,而不是“我合并之前HEAD 是什么?”
git pull 只是git fetch 后跟git merge FETCH_HEAD 的简写(参见git-pull doc。但你是对的.. git log 不会告诉你快进合并。跨度>