在 git 中显示未提交合并的父级
Posted
技术标签:
【中文标题】在 git 中显示未提交合并的父级【英文标题】:Show parents of uncommitted merge in git 【发布时间】:2012-11-15 10:59:42 【问题描述】:如何在 git 中查看未提交合并的父级?我可以通过git log -1
看到一位家长,但我如何看到另一位家长?
这在 Mercurial 中很容易做到:
$ hg parents
changeset: 2:b65656dbfff6
tag: tip
parent: 0:1806d848df54
user: Stephen Rasku
date: Tue Nov 27 10:14:31 2012 -0800
summary: c
changeset: 1:9aaa22944f41
user: Stephen Rasku
date: Tue Nov 27 10:14:01 2012 -0800
summary: b
在 git 中有什么等价的吗?我知道您可以在 git 中看到已提交合并的父级。这是专门用于查看未提交合并的父级。
【问题讨论】:
cat .git/MERGE_HEAD
将显示您正在合并到 HEAD 中的提交 ID。 cat .git/HEAD
当然会向你展示 HEAD。
那行得通。您可以使用git log -1
获得一个人头,使用git log -1 `cat .git/MERGE_HEAD`
获得另一个人头。如果你把它作为答案,我会接受它。否则我会自己做。
【参考方案1】:
未提交合并的源存储在.git/MERGE_HEAD
中。如果您正在执行章鱼合并,您将在此文件中有多个提交 ID,以换行符分隔。合并的目标,当然是HEAD
。
如果您想要详细的输出,类似于您从 Mercurial 提供的示例,您可以将其输入到git log
,正如您所指出的。编写一个 shell 脚本来处理这个可能是最简单的。
如果您将此脚本命名为 git-parents
,并将其放在您的路径中,您只需运行 git parents
即可获得与您描述的类似的体验:
#!/bin/sh
git --no-pager log -1
WORKDIR=`git rev-parse --show-toplevel`
if [ -f "$WORKDIR/.git/MERGE_HEAD" ]; then
for a in `cat "$WORKDIR/.git/MERGE_HEAD" | xargs` ; do
git --no-pager log -1 $a
done
fi
【讨论】:
你为什么要管猫?我尝试了它存在和不存在的脚本,它似乎对我的简单(非章鱼)测试用例没有影响。git log
,无论如何,对我来说,总是发送到$PAGER
。对我来说,$PAGER
是 less
,它总是会在 EOF 处停止,即使行数小于您的显示尺寸。 more
可能没有这个限制,而且我不知道在 Win32 上使用 msys 或 cygwin 会发生什么。管道到 cat 将避免分页。
啊哈,手册页中没有 --no-pager
选项,但在 ***.com/questions/13824165/git-for-windows-paging 中引用了这将是一个更好的解决方案。 (已编辑。)
我注意到,如果您在未进行合并的地方运行解决方案,则该解决方案不起作用。我提出了一个解决方案,但被拒绝了。你看到编辑了吗?
我没有。您是什么意思“在不进行合并的地方运行它”?【参考方案2】:
我没有 repo 可以在这里尝试,但这不起作用吗?
$ git show HEAD^ # shows first parent
$ git show HEAD^2 # shows second parent
$ git show HEAD^3 # and so on...
是否需要向所有父母展示,无论有多少?我想你可以用git log -1 --parents
或类似的东西编写一些脚本。
【讨论】:
这将显示提交的父项,而不是未提交合并的父项。以上是关于在 git 中显示未提交合并的父级的主要内容,如果未能解决你的问题,请参考以下文章