如何在给定的合并提交之前找到分支上的最后一次提交

时间:2018-05-22 16:14:31

标签: git

我有一个分支,开发,几天前我使用commit hash 92dd09b 合并。

为清楚起见,这是我在Git Extensions中提交的图片: enter image description here

鉴于哈希,我需要在合并之前在develop分支上找到先前的提交。我该怎么做呢?

如果我查看我的提交哈希,git log会显示我分支上的先前提交,而不是开发。

我看了这个this question,然后检查了我的合并哈希( 92dd09b )并运行了这个命令:
git log HEAD @ {1} -1

但是我收到一个错误: 致命的:模棱两可的争论' HEAD @':未知的修订或路径不在工作树中。

我正在使用Git for Windows。

2 个答案:

答案 0 :(得分:1)

根据评论,似乎我误读了有关提交92dd09b标识的问题。我在下面保留了原来的答案,以避免让评论对话更加混乱。但根据我目前的理解,你真的有

                              ... x
                                   \
x -- x -- x -- A -- 92dd09b -- x -- M2 -- x <--(develop)
                   /
         ... x -- B <--(branch)

在这种情况下,您首先尝试的(checkout 92dd09b,运行git log)应该显示来自两个分支的提交;你可以排除&#34;合并在&#34;中的提交。分支说

git log --first-parent

或者,根据博士的回答,你可以说

git show 92dd09b~

(除其他外)。

您的评论表明,这并没有让您进入正确的提交,这表明某些内容被错误地观察到了。

因此,我理解你有一个开发分支的问题

x -- x -- x -- A <--(develop)

你有另一个分支

x -- x -- x -- A <--(develop)

   ... x -- 92dd09b <--(branch)

您将92dd09b合并到develop

x -- x -- x -- A -- M1 <--(develop)
                   /
   ... x -- 92dd09b <--(branch)

现在可能还有一些工作已经发生了

                        ... x
                             \
x -- x -- x -- A -- M1 -- x -- M2 -- x <--(develop)
                   /
   ... x -- 92dd09b <--(branch)

所以现在你想找到A

作为一项规则,提交使其易于查看&#34;及时回复&#34 ;;不太容易期待。如果你从92dd09b开始,你必须&#34;期待&#34;到达M1然后回顾A

所以它并不像你希望的那么容易。但这是可以完成的。你可以从

开始
git log --merges --format=%p develop

这将为develop中的每个合并提交提供父列表,每行一个。那么你可以通过多种方式过滤它。

git log --merges --format=%p develop |grep 92dd09b$ |cut -d" " -f1

应打印&#34;其他&#34;的缩写哈希值。 M1的父级,应为A。 (假设它不是章鱼合并,并假设你将92dd09b 合并到 develop而不是相反。)

答案 1 :(得分:0)

首先,您不需要签出合并,所以让我们返回开发:

git checkout develop

从已知哈希中获取先前的提交:

git show 92dd09b~

有许多不同的方法可以浏览历史记录来命名另一个提交:https://git-scm.com/docs/gitrevisions