Py学习  »  Git

git checkout HEAD~N不会做出我预期的承诺

Peter Kapteyn • 3 年前 • 1234 次点击  

我看到你的行为 git checkout HEAD~N 不会回到我的git历史中。

如果我的提交历史是这样的

git log --oneline -n 5

3ad352f (HEAD -> develop, origin/develop, asdf) commit message
93eeda7 Merged in branch (pull request #224)
911eb78 (origin/sdfa, asdf) Removes txt file
4b9de92 branch1
7a162e3 Merged in branch1 (pull request #223)

我做了一个 git checkout HEAD~5 我的理解是,我的头应该指向5年前的提交。然而,当我运行这个命令时,我看到如下情况:

$ git checkout HEAD~5

$ git rev-parse HEAD
49569625ffe9bfc13fdd4f1f5baab9a72ef7ca02

$ git rev-list --count `git rev-parse HEAD`..develop
13

看起来我实际上在13年前签出了一个提交,而不是我预期的5个。

有人能解释一下发生了什么,以及我如何在一个commit N commit之前签出一个commit吗?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130033
 
1234 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Code-Apprentice
Reply   •   1 楼
Code-Apprentice    3 年前

“5次提交前”是指遵循当前提交的父系。你不能简单地计算输出的行数 git log --oneline .

LeGEC
Reply   •   2 楼
LeGEC    3 年前

如果你想结账 7a162e3 Merged in branch1 (pull request #223) :

  • 最简单、明确的方法就是跑步 git checkout 7a162e3 (你有sha,使用它)
  • 如果你跑了 git log --oneline --graph -n 5 ,你可能会看到:
3ad352f * (HEAD -> develop, origin/develop, asdf) commit message
93eeda7 * Merged in branch (pull request #224)
        |\
911eb78 | * (origin/sdfa, asdf) Removes txt file
4b9de92 | * branch1                                
7a162e3 * Merged in branch1 (pull request #223)

( 笔记 :从您问题中的提交消息中,我不确定我是否了解您的回购的正确历史记录,请在您的终端中检查您的提交是如何关联的)

如果历史记录如上所述,从活动提交中计算“第一个父母”,那么您会计算 HEAD~2 (而不是 HEAD~5 )


<commit>~N 只会遵循从 <commit> 虽然 git log git log --oneline 如果没有其他选项,将列出(在平面列表中)来自合并分支的提交,这将“添加”到显示的提交计数中。

git日志 git rev-list 两者都有各自的特点 --first-parent 选项,还可以将显示的提交列表限制为该“第一个父项”序列:

git log --oneline --first-parent HEAD~5..HEAD  # will list only 5 commits
git rev-list --count --first-parent HEAD~5..HEAD  # will display '5'

我还强烈建议滥用 --graph 选择 git日志 ,以了解您看到的提交是如何相互依赖的:

git log --oneline --graph   # you will have a view of what commits are merges,
                            # and what commits come from side branches

附加说明

自从 HEAD (相当于 HEAD~0 )显示在 git日志 的输出中,还存在“关闭一个”错误 -n 5 :在显示的列表中 git log -n 5 ,你最多会看到 HEAD~4 头~5 .