2012-03-27 80 views
29

我回到了一个旧项目,我跑了好的git status找出发生了什么,我注意到太多分支!我想在开始就这一重新工作之前,做一些内务,但我不知道哪支来自哪个..GIT - 我从哪里分支?

E.G. “branchA”是否来自“开发”? “branchB”是从“master”还是“branchA”派生的?

我怎样才能回答上面的样题?

+0

尝试过'gitk --all'?的 – Mat 2012-03-27 21:38:34

+0

可能重复[混帐:寻找什么分支提交的来源(http://stackoverflow.com/questions/2706797/git-finding-what-branch-a-commit-came-from) – Cascabel 2012-03-27 23:43:03

+0

可能重复的是真的有点脆弱 - 它可能正是你想要的一些分支,但可能不包括一切。可能应该只是联系在一起,对不起。 – Cascabel 2012-03-27 23:44:19

回答

14

有此不规范的答案,因为分支机构只能连结到DAG中的特定的提交。例如,masterfoo可能指向相同的提交;如果您从foo创建分支,则与从master创建分支的效果相同。也就是说,如果您通过gitk或其他一些图形历史记录工具可视化提交图,则可以大致了解分支点在提交图中的位置,以及各种分支指针指向的位置。

+0

如果你使用git的“嫁接”,你可以创建循环,使它不再是一个DAG。显然这是不好的。 :-)(毫不奇怪,尽管它应该大部分都是“正常工作”,不是我已经尝试过了。)我怀疑你也可以用'filter-branch'创建循环,而不是我尝试过。至少,直接合并似乎拒绝创造周期的尝试。 – torek 2012-03-27 21:53:27

1

您可以使用图形树查看器,我使用gitg来查看分支和差异,尽管大多数时间我都在使用命令行进行实际工作。

21

git merge-base示出了提交即两个分支的共同祖先。

简单的用法:git merge-base <branch> <branch>显示了两个分支的共同承诺。

+4

你能展示如何调用这个语法吗? – jwfearn 2014-08-27 22:54:11

+0

请参阅http://git-scm.com/docs/git-merge-base如上所述,您提供了两个用于比较的提交id。所以如果你在某个项目中有master和devel分支,'git merge-base master devel'会告诉你这两个分支共同祖先的提交。 – patthoyts 2014-08-28 12:37:54

0

坚持一个命名约定和饶了自己所有的困惑。

master创建分支时 - 可以说,要实现电子邮件功能 - 您可以将其命名为master_emailfeature。那么如果你需要从这个分支创建一个子分支来实现电子邮件的ssl,那么你可以将它命名为master_emailfeature_sslandtls

这清楚该分行从刚刚通过查看分支的名称创建。

0

如果你想找出哪些远程分支来源于当地分行,该命令可以提供一些线索。

git remote show origin 

向下滚动,直到看到“配置‘混帐拉’本地分支:”那下面,则显示你所有的地方分支机构的列表,每个将合并远程分支。