GIT - 我从哪里开始分支?

Mar*_*ace 44 git branch git-branch

我回到了一个旧的项目,我跑了很好的git status去弄清楚发生了什么,我注意到了太多的分支!我想在开始再次工作之前做一些家务,但我不确定哪个分支来自哪个..

EG"branchA"是否来源于"发展"?"branchB"是否来自"master"或"branchA"?

我如何回答上面的示例问题?

pat*_*yts 28

git merge-base显示提交,它是两个分支的共同祖先.

简单用法:git merge-base <branch> <branch>显示两个分支的常见提交.

  • 你能展示如何调用它的语法吗? (4认同)

Amb*_*ber 19

对此没有规范的答案,因为分支只是指向DAG中某些提交的指针.例如,master并且foo可以在同一指着提交; 如果你然后创建一个分支foo,它实际上与创建分支相同master.

也就是说,如果您可视化提交图(通过gitk或其他一些图形历史记录工具),您可以大致了解提交图中分支点的位置,以及各种分支指针所指向的位置.


Cor*_*ein 15

如果您已经在一个分支上,那么您可以获得提交,这是它从另一个分支分叉的点,例如master,如下所示:

git merge-base --fork-point master
Run Code Online (Sandbox Code Playgroud)

然后使用git show <commit-id>. 如果你没有提交 ID,那么这个分支就不是来自那个分支。

例如,我不确定我是否从dev或分叉master

$ git checkout my-branch
$ git merge-base --fork-point master
$ git merge-base --fork-point dev
1770f75fa178df89a40ddc5f13ecd6bc597c17df
$ git show 1770f75fa178df89a40ddc5f13ecd6bc597c17df
commit 1770f75fa178df89a40ddc5f13ecd6bc597c17df (origin/popup-stack-12, dev)
Merge: 37f79cf f8a9795
Author: Superman <super@example.com>
Date:   Sun Mar 29 23:14:40 2020 +0000
...
Run Code Online (Sandbox Code Playgroud)

我从 dev 分叉了这个分支。


Wal*_*ard 11

命令行 git 可执行文件还能够显示分支和合并的基本树,使用 --graph 选项进行 git log。您可以使用其他选项对其进行各种不错的增强。试穿以下尺码:

最简单:

git log --graph
Run Code Online (Sandbox Code Playgroud)

好的:

git log --graph --decorate --simplify-by-decoration --color --oneline --date=local
Run Code Online (Sandbox Code Playgroud)

光猪六壮士:

git log --graph --decorate --simplify-by-decoration --color --oneline --date=local --pretty=format:'%C(auto) %h %d %C(reset)%s (%C(cyan)%ad %ae%C(reset))'
Run Code Online (Sandbox Code Playgroud)


Jer*_*ats 7

正如其他人提到的,没有规范的答案,但git reflog在某些情况下可以通过显示本地 git 历史记录来提供帮助:

a1b2c3d4 (HEAD -> my_current_working_branch) HEAD@{0}: pull origin master: Merge made by the 'recursive' strategy.
aaaa1111 (origin/my_current_working_branch) HEAD@{1}: commit: Added bar
def123aa (forgotten_branch) HEAD@{2}: checkout: moving from forgotten_branch to my_current_working_branch

Run Code Online (Sandbox Code Playgroud)

在这种情况下,我可以看到我从forgotten_branchto分支my_current_working_branch并合并master

它并不总是为您提供所需的信息,但在某些情况下可以提供帮助。