如何在git中找到最后一次merge?

myzjeezk  于 2023-10-14  发布在  Git
关注(0)|答案(7)|浏览(119)

对于一个网站,我有大师和舞台,我已经工作了大约10天的舞台。我如何确定自上次合并以来发生了什么变化,或者合并是什么时候发生的?我做过的大多数合并最终都是FF,所以我不能像git merge branch -m 'merging staging'那样记录它们(git报告它忽略了-m)。在将staging合并到master中进行更多测试和部署之前,我通常会将master合并到staging中进行测试。
我可以标记每一个,但我担心这样做合并的混乱。我想知道的是,自从我上次将舞台合并到master中以来,大致上发生了什么变化?“这样我就可以确保我花额外的时间在期末考试中调查这些变化。有时候,同事会做出一些改变,直到这个阶段我才注意到。
我想既然staging->into->master合并很少见,我可以标记它们,然后做一个“git whatchanged tag”,但我希望有一个非标记的方法来做。谢谢.

izkcnapc

izkcnapc1#

git log --merges -n 1

运行良好。来自man git-log

--merges
       Print only merge commits. This is exactly the same as --min-parents=2.

下面是一个使用--pretty=format:"%H"只获取SHA的例子。

$ git log --pretty=format:"%H" --merges -n 1
f32e1f13eef7d5843e8063b8709d01af6dcd5dbf

信贷去Jefromi为他们的评论另一个答案。

dxxyhpgq

dxxyhpgq2#

试试这个,它会选择提交消息以“Merge”开头的最后一个分支:

git show :/^Merge

Here是一个网站,上面有一些git技巧,可能会帮助你。

oyxsuwqo

oyxsuwqo3#

另一种不依赖于提交消息内容的方法:

$ git rev-list --min-parents=2 --max-count=1 HEAD
9c6e6d6b6b9bd293335700e34e05217ae8e7a7e8

--min-parents=2只选择合并的提交,--max-count=1只在历史中显示第一次提交。如果指定的提交(HEAD)在其历史中没有任何合并提交,则输出将为空。

svgewumm

svgewumm4#

看来这是我最好的选择:
我编辑了~/.gitconfig,添加了:

[branch "master"]
    mergeoptions = --no-ff

然后如果我在master上合并一个分支,它会显示为完全合并。将其作为“master”的配置选项显示了git是多么的棒,所以我仍然可以在分支中进行FF合并,在那里我可能有很多短命的主题分支,并且我不必记得在master上合并时指定--no-ff。美了
我使用此别名查看日志:
k = log --graph --pretty=format:'% Cred%h% Creet-%C(yellow)%d% Creet %s %Cgreen(%cr,%cd)%C(bold blue)<%an>% Creet ' --焦v-commit

> git k (similar to the gui gitk, but stays in the terminal)

当我以这种方式查看日志时,它描绘了一幅很好的分支图片。如果我想找到最后一个,

> git show :/"Merge branch 'staging'"

谢谢你的帮助
编辑:正如@jefromi在第一个答案的评论中指出的那样,这可能是一个更好的技术git log --merges -n 1

4xy9mtcn

4xy9mtcn5#

看起来你并不想知道自上次合并以来发生了什么变化,而是想知道我在分支 staging 上有哪些尚未在分支 master 上的内容?(或相反)。如果是,请查看命令git cherry
不过我必须承认,由于输出格式的原因,我从未使用过这个命令,这并没有多大帮助。也许有一种方法可以将此输出提供给git log/git show或类似的东西。

编辑:据我所知,使用git whatchanged不需要标记。只需尝试git whatchanged master..staging,查看自上次从staging合并到master后,staging上发生了哪些变化。

vql8enpb

vql8enpb6#

为什么不简单地将您的临时分支与主分支进行比较呢?这将显示每个文件中的实际差异,而不仅仅是那些未合并的内容。还有你过去从staging到master合并时可能会丢失的东西。
尝试git diff master..staginggit diff master...staging来查看它们的共同祖先与“staging”的差异。

qncylg1j

qncylg1j7#

取最新的合并并给予合并到当前分支的分支名称
MC= git log --merges -n 1 | grep request ;{$MC##*:}; B=${BB%% };子分支=${B##/} echo $MC

相关问题