代码之家  ›  专栏  ›  技术社区  ›  Ehryk

我如何通过git历史记录查看提交的路径,或者“它在当前分支中的位置”?

  •  4
  • Ehryk  · 技术社区  · 9 年前

    我正在使用查找提交历史记录 gitk git log 我想看看一个特定的提交是如何到达某个分支的。我可以看到历史上的承诺,所以我知道他们在那里。

    我想了解的是他们是如何合并的(他们本来应该留在自己的分支机构)。这是一个非常大的项目,在所讨论的提交和分支的当前状态之间有数百个提交,因此我无法通过 吉克牌手表 ,并且提交在其他分支中被屏蔽,并合并和提交消息。

    为此,我一直在尝试:

    gitk {sha1hashIDstring}..branch_name
    gitk {sha1hashIDstring}..branch_name --ancestry-path
    git log {sha1hashIDstring}..branch_name --reverse
    git log {sha1hashIDstring}..branch_name --merges --reverse
    git log {sha1hashIDstring}..branch_name --ancestry-path --reverse
    git log {sha1hashIDstring}..branch_name --ancestry-path --merges --reverse
    

    我不理解结果。我只想看到包含有问题的具体提交的项目,这样我就可以清楚地看到它是如何进入有问题的分支的。我怎么做?

    实例

    我在寻找什么 吉克牌手表 最好,但 git日志 就足够了:

    Message       Author         Date         #commit that merged branch z into current branch
    Message       Author         Date         #commit that merged branch y into branch z
    Message       Author         Date         #commit that merged branch x into branch y
    Message       Author         Date         #commit that merged {sha1hashIDstring} commit/branch a into branch x
    Message       Orig_Author    Date         #{sha1hashIDstring} original commit, on branch a
    

    更多信息

    我还没有看到任何答案,所以如果没有答案,我会开始悬赏,但也许我没有正确解释这个问题(我愿意接受改进和澄清的建议)。

    这其中的驱动因素是,我可以看到提交本身,并且被告知它不应该在某个分支上。下面是我看到的:

    Message       Orig_Author    Date         #{sha1hashIDstring} commit
    Message       Orig_Author    Date         #Merged into branch test_dec14 (includes original commit)
    ...
    Message       Author         Date         # unrelated commits
    Message       Author         Date         # more unrelated commits
    # Stuff happened here ??? everything I do gives me hundreds of things here 
    # Not all of them related to the {sha1hashIDstring} commit
    # No idea how to see only the ones that are
    ...
    Message       Author         Date         # final commit on test_jan15 branch
    

    我被告知在 test_dec14 不应该去 test_jan15 除非它们被释放,因此{sha1hashIDstring}提交不应该在 测试_ 1月15日 但它确实存在。我想知道为什么,它是如何到达那里的,以及是谁把它放在那里的。

    5 回复  |  直到 9 年前
        1
  •  2
  •   Jason Jones    9 年前

    对于问题的后半部分,“它是如何在当前分支中获得的?”,请查看 git-when-merged .

    根据其自述文件,这是一个Python脚本:

    查找提交合并到一个或多个分支的时间。查找合并 将commit带入指定分支的提交。具体来说,在包含commit作为祖先的BRANCH的第一个父历史上查找最早的提交。

    这听起来像是在确定 {sha1hashIDstring} 提交已合并到 test_jan15 树枝

        2
  •  1
  •   CodeWizard    9 年前

    这是一个典型的案例 git bisect 平分线有助于追踪错误。 在您的情况下,您只需查找commitId(它放错了分支)。

    Bisect是一个非常简单但功能强大的工具。

    http://git-scm.com/docs/git-bisect http://hashrocket.com/blog/posts/finding-failure-git-bisect

    希望它能帮到你。

        3
  •  1
  •   love    9 年前

    您尝试过gitlog的“--decorate”选项吗?

    我的.gitconfig中有这个别名:

    [别名]

            k = log --graph --oneline --abbrev-commit  --decorate
    

    它显示了一个与gitk所示类似的图,其中除了分支中最近的提交之外,还显示了分支名称“修饰”。


    --

    尝试 tig 也它比gitk信息更丰富(根据我的用法;)。提到 http://gitready.com/advanced/2009/07/31/tig-the-ncurses-front-end-to-git.html 一旦 我认为任何一种解决方案都会给你所需的结果。

        4
  •  1
  •   love    9 年前

    我在谷歌上搜索了一些东西,为你找到了一些东西。信用记入 #vonC

    git when-merged [OPTIONS]提交[分支…]

    查找提交合并到一个或多个分支的时间。 查找将commit带入指定BRANCH的合并提交。

    具体来说,在包含commit作为祖先的BRANCH的第一个父历史上查找最早的提交。

    git-what-branch

    发现提交所在的分支,或它是如何到达命名分支的 这是Seth Robertson的Perl脚本,看起来很有趣:

    SYNOPSIS
    
    git-what-branch [--allref] [--all] [--topo-order | --date-order ]
    [--quiet] [--reference-branch=branchname] [--reference=reference]
    <commit-hash/tag>...
    OVERVIEW
    

    告诉我们(默认情况下)提交和合并的最早因果路径,以使请求的提交到达指定的分支。 如果直接在指定的分支上进行提交,那么这显然是最早的路径。

    所谓最早的因果路径,我们指的是最早合并到命名分支的路径,即提交时间(除非指定了拓扑顺序)。

    性能

    如果许多分支(例如数百个)包含提交,系统可能需要很长时间(对于linux树中的特定提交,探索一个分支需要8秒,但有超过200个候选分支)来跟踪每个提交的路径。 选择要检查的特定引用分支引用标记将快数百倍(如果您有数百个候选分支)。

    **EXAMPLES**
     # git-what-branch --all 1f9c381fa3e0b9b9042e310c69df87eaf9b46ea4
     1f9c381fa3e0b9b9042e310c69df87eaf9b46ea4 first merged onto master using the following minimal temporal path:
       v2.6.12-rc3-450-g1f9c381 merged up at v2.6.12-rc3-590-gbfd4bda (Thu May  5 08:59:37 2005)
       v2.6.12-rc3-590-gbfd4bda merged up at v2.6.12-rc3-461-g84e48b6 (Tue May  3 18:27:24 2005)
       v2.6.12-rc3-461-g84e48b6 is on master
       v2.6.12-rc3-461-g84e48b6 is on v2.6.12-n
       [...]
    
        5
  •  0
  •   Rycochet    9 年前

    我知道这不是用“github”标记的,但如果项目在那里,Blame或History(查看特定文件时文件头中的按钮)的视觉样式可以让跟踪事件发生的时间变得更加容易。

    不确定这是否真的解决了这个(非常)具体的问题——但这可能会帮助其他有类似问题的人找到这个问题。。。