请参阅git两个提交之间的所有提交的列表(跨分支)

时间:2015-04-23 22:15:25

标签: git

我有两个分支,其中提交是独立进行的,我想运行一个Git命令,它将显示在某个时间帧(表示为提交哈希)之间进行的所有提交,而不管分支。

这是我的测试报告,用于演示:https://github.com/jsniecikowski/testApp

如果我们将Git的历史想象成一个列表(最新的):

    发布分支
  • 4332e0e
  • 18bc14a发布分支
  • 主分支
  • 90f9149
  • 发布分支上的
  • 4f6e07f
  • 发布分支
  • ca404cf
  • 发布分支上的
  • 6cf47b3

然后我想说:'给我在' 90f9149'之间发生的所有变化。和' 4332e0e'。 理想情况下,我会得到一个提交:18bc14a

我的理解是这个命令可行:

git log --full-index --no-abbrev --format=raw -M -m --raw 90f9149d2f7367738e9d6f4a53c2c325f96a9b5f..4332e0eb24e18119b10835e361915f1f5eff16bc

但是,此命令返回的结果多于预期。

这是git的错误,还是我在命令中遗漏了什么?

2 个答案:

答案 0 :(得分:2)

根据您链接到的repo,如果您只想要18bc14a,则不希望masterRelease之间的提交有所不同,但Release中的提交不一致比master中的最新提交更晚的日期。你确定吗?

在这种情况下,您可以使用以下命令获取最新提交的日期:

git log -1 master --pretty=%ad

以及发布日期以来的提交:

git log Release --since=<date>

将这些放在一起:

git log Release --since="$(git log -1 master --pretty=%ad)"

这还包括4332e0e,但你为什么不想要呢?如果您确实不这样做,请在^之后添加Release

答案 1 :(得分:0)

Gauthier的优秀答案非常接近,但没有说明如何使用哈希来指定我们想要检查的区域。

建立在我的基础之上:

git log Build-Release-Testing --since="$(git log -1 90f9149d2f7367738e9d6f4a53c2c325f96a9b5f --pretty=%ad)" --until="$(git log -1 4332e0eb24e18119b10835e361915f1f5eff16bc --pretty=%ad)"

剩下的部分是从返回中消除指定的哈希值。