我希望看到我的实际分支来自哪个分支。我已经看了一下日志,但它太吵了,我想100%肯定在这种情况下找到正确的分支。
答案 0 :(得分:4)
在每种情况下都无法回答这个问题。 分支不是持久的:你可以随意移动分支。 reflog将允许您查看分支的某些历史记录,但reflog仅限于本地,并且将限制为90天(默认情况下)。
您可以使用git reflog <branch>
在您的仓库中首次出现此分支:
$ git reflog branch | tail -n 1
03302d2 branch@{12}: branch: Created from HEAD
在此示例中,03302d2
是该分支的第一次提交。
然后,你可以find the branches that the parent of this commit came from。
例如,你可以做
$ git branch --contains 03302d2^
有关更复杂的方法,请参阅链接的问题。但请再次注意,此搜索未完成,您可能会错过&#34;正确的&#34;分支。
答案 1 :(得分:2)
以下内容即将结束,但请参阅限制。
git branch --contains $(
git for-each-ref --format='%(refname)' refs/heads/ |
xargs git merge-base --fork-point)
我们使用git merge-base --fork-point
来获取一个分叉点作为SHA-1。 merge-base
需要检查分支名称。所以你可以很容易地问一下主人和我现在的分支之间的分叉点。
因为我们要检查我们使用的所有分支git for-each-ref --format='%(refname)' refs/heads/
。然后我们回到SHA-1。为了获得分支名称,我们使用git branch --contains
围绕这个有很多限制。它只是让你很好地猜测存储库来自哪个分支,但是对于git来说,很难确定哪个分支来自哪个。举个例子
o -- o
/ ^ branch-a
o -- X -- o -- o
\ ^ branch-b
o -- o -- o
^ branch-c
branch-c
来自哪个分支?在两个分支X
和branch-a
上标记为branch-b
i的提交。所以它可能来自其中任何一个。
Git中的分支是提交的简单指针。分支指向的提交的每个祖先都是分支的一部分:例如:
a -- b -- c -- d <master
\
d -- e <foo
a
,b
是master
和foo
的一部分,而b
,c
,d
是其中的一部分master
。但是分支只是指针的名称。我们可以为d
设置一个新名称。
a -- b -- c -- d <master
\ ^bar
d -- e <foo
现在master
上的所有内容也在bar
上。分支机构没有版本,因此我们无法回答分支在某个时间点指向的问题。因此,我们无法清楚地确定foo
分支的位置。 Git提供了一个记录分支移动的reflog,但随着时间的推移会过期。
由于分支的性质是可变的,因此在git中唯一要保存的是 fork-point 作为sha-1。但是,您可以依赖git merge-base --fork-point
返回一个实际分叉点的SHA1。
答案 2 :(得分:1)
在本地存储库的当前目录/路径中,键入命令:
git log --oneline --decorate --graph
(存储库https://github.com/spring-projects/spring-boot.git的分支结构)
您将看到分支的路径。
答案 3 :(得分:0)
添加替代方式。您还可以将git branch与-v
git branch -v
将列出第二列中的原始提交。