【问题标题】:How to find the oldest common descendant of two commits in git?如何在git中找到两个提交的最古老的共同后代?
【发布时间】:2015-09-18 10:38:51
【问题描述】:

给定两个(或更多)提交,我想找到加入它们的最旧的合并。类似于git merge-base 的反面(找到最年轻的共同祖先)。请注意,我正在寻找的提交将是起始提交的年轻后代。

换句话说:我想调查合并两个给定提交的合并提交(同一文件发生更改的地方)。

【问题讨论】:

  • 这不是你想要的吗? stackoverflow.com/questions/8475448/…
  • @smyatkin_max 不,那个问题有一个分支,合并应该在哪里。 (我还不知道哪个分支有我正在寻找的最旧的合并提交。)

标签: git git-merge git-rev-list


【解决方案1】:
oldest-merge() { 
        ( for c; do git log --all --merges --ancestry-path ^$c --pretty='%aI %h %s'; done ) \
        | sort | uniq -c | awk "\$1 == $# {print;exit}"
}

oldest-merge `git rev-list --all --grep=BUG-27182`  # e.g. 

最终的 awk 采用出现在所有合并祖先列表中的第一个提交。

【讨论】:

  • 输出默认按时间倒序给出。
【解决方案2】:

如果 $a 和 $b 是两个提交哈希并且它们都包含在 master 中,那么说

git rev-list $a..master --ancestry-path >a
git rev-list $b..master --ancestry-path >b

然后使用 diff 工具找到 a 和 b 的最后一个公共行。

【讨论】:

  • 我已经尝试过了,当使用cmp 进行比较时,我确实找到了一个共同的提交。但是,这不是同时具有 ab 提交更改的“最早”/“最旧”常见提交。它甚至不是“最新的”/“最年轻的”提交。它介于两者之间。不完全确定。
猜你喜欢
  • 2021-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-22
相关资源
最近更新 更多