如何判断 Github 提交是哪个分支?

24
在Github上,当我查看提交时,它会显示提交消息和更改内容,以及底部的任何评论。但是,它没有告诉我提交检入的分支是什么。即使我“浏览代码”,它也是浏览特定“树”(可能是提交时代码状态)的代码,而不是特定的分支。
我知道git中的提交并不与分支直接相关联,但是它们肯定会首先提交到特定的分支中吧?提交是否带有该分支的标记,并且我可以以某种方式查看它所在的分支吗?

也许你可以从后续的合并提交中看出来?否则我不知道有什么其他方法可以做到这一点;分支只是对提交的引用,应该是短暂的。 - Will Vousden
2
由于你提到的问题,我发现 Github 的提交视图几乎没有用。另一个缺失的功能是链接到所有子提交(甚至跨克隆)的链接。 对于你的问题,Github 应该链接所有包含此提交的分支,这些分支可以通过 git branch --contains <this commit> 列出。 - Tilman Vogel
至于最初提交到哪个分支,我倾向于认为这是无关紧要的,因为它可能是一些经过多次变基的本地特性分支,本来就不应该被看到。而且它也没有记录。 - Tilman Vogel
这个回答解决了你的问题吗?如何从提交ID找到分支 - Michael Freidgeim
6个回答

12

好的,从根本上说,回答这个问题的方法是:没有确定的方法可以确定。Mercurial实际上会用它们检查到的分支的名称来标记提交,但是git却不会;显然,分支的名称并不重要。这是一个设计决策,看起来它不会改变。


11
如果您知道提交号,可以简单地执行以下操作: git branch --contains <commit> 这应该会给出提交所在的分支名称。
更新: 特别是在GitHub上,现在可以看到给定提交所属的分支。 博客post "Branch and Tag Labels For Commit Pages"详细介绍了以下内容:
如果提交不在默认分支上,则指示器将显示包含提交的分支。 如果提交是未合并的拉取请求的一部分,则会显示链接。

enter image description here


1
或者如果你想查看远程分支:git branch -a --contains <commit> - Tsvetomir Dimitrov
1
这是一些有用的信息,但回答与问题略有不同。它显示了包含在历史记录中的提交所在的所有当前分支。这很可能是多个分支。原帖作者想知道提交时检出的特定分支名称。这些信息永远丢失了,因为人们可以轻松地重命名分支并在不相关的历史记录上使用相同的分支名称。 - Jeff Puckett

5

来自git help branch

使用--contains选项,仅显示包含指定提交的分支(也就是说,它们的最新提交是指定提交的后代)。

使用--merged选项,仅列出已合并到指定提交中的分支(即,其最新提交可以从指定提交到达)。

使用--no-merged选项,仅列出未合并到指定提交中的分支。如果省略参数,则默认为HEAD(即当前分支的最新提交)。


3
如果是相对较新的提交,您可以转到网络图(例如 https://github.com / BenHocking / ShortCircuitGA / network ),并将鼠标悬停在分支上的每个节点上,直到找到所需的提交。虽然不太高效,但这是我直接从GitHub了解到的唯一方法。(如果您拥有SourceTree、GitX或其他视觉Git客户端,则可能存在其他替代方法,以及命令行替代方法。)

那个运作得相当不错。但我仍然不知道为什么提交时没有自动标记它们所检查的分支名称,这对于旧提交尤其有帮助。 - Jez
我经常在开发一个特性时,在本地分支上提交一系列的commit,最后完成后再将该分支合并到主干(trunk)并推送(push)。因此,这些commit会被标记为一个对其他人无意义且可能与其他本地分支甚至远程分支名称冲突的分支名。 - Useless

1

这个答案对于之前的签入不起作用,但我使用以下的commit-msg钩子脚本将当前分支附加到每个提交消息中。

#!/bin/sh
#
export BRANCH=`git status | head -1 | cut -c13-`
echo -n "($BRANCH) - " > .git/tmp-msg
cat $1 >> .git/tmp-msg
mv .git/tmp-msg $1

exit 0

1

开始提交拉取请求以进行提交。您将在“来自”侧面看到默认源分支。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接