2011-06-23 110 views
30

我有一个场景,其中有几个需要同步的本地存储库内的远程跟踪分支。我们的工作流模型是:如何判断我的分支是基于哪个远程“父”分支?

  • 做出分支机构本地,立足关所需的远程跟踪分支
  • 的使我们的变化
  • 构建/测试/修复
  • 提交
  • 推回遥控器服务器

我注意到,“git status”并不显示我的本地分支所基于的分支,除非有所改变;即未提交的本地更改或最近的提取使我的本地分支落后于时代。有什么方法可以知道我的本地分支是基于什么分支而不必改变它?就像“git status -showparentbranch”或者其他一些会显示这个的命令。偶尔我会遇到这种需求,但不知道如何去满足它。

回答

14

Git不跟踪提交的分支。没有办法告诉。如果提交发生在你的回购上,那么你可以检查reflog,但这就是它。看看the Pro Git book中对DAG的解释 - 也在那里阅读reflog。

您也可以可视化历史更好地gitk --allgit log --graph --decorate

希望这有助于。

+3

'git的节目,branch'告诉你的发散了。 –

+1

是。接得好。您还可以在日志命令中添加'--oneline'以适应屏幕上的更多提交。 –

+1

很多道歉。我忘了评论这是否回答了我的问题。我不确定它确实如此。从你的回答中,我想知道我是否正确提问。我没有试图找出哪些分支受到我的承诺的影响。相反,我想知道是否有方法知道我的本地分支是基于什么远程分支。 –

9

git branch -vv将:

  • 列表所有当地分支机构
  • 显示远程分支的名字旁边的每个地方分支
  • 亮点活动的本地分支

。从这里你将能够确定当前活动分支的远程分支,以及更多。

如果您有很多本地分支,列表可能会很长。使用git branch -vv | grep SOMEWORD将输出限制为仅包含SOMEWORD的分支。如果你能想到一个独特的词,你会得到最好的过滤器(只有一个结果)。

您还将在输出中获得一些附加数据,即最后一次提交的编号(SHA1)和消息。 grep过滤器将适用于这些。我找不到排除它的方法。

从Git的branch documentation

-v

-vv

--verbose

当在列表模式下,显示SHA1,并承诺为每头主题行,沿与上游分支的关系(如果有的话)。如果给出两次,也打印上游分支的名称(另请参阅git remote show)。

(基于您的评论,是的,它似乎是“正确”的问题会问“远程”分支,而不是“父”的分支。但是,这就是我搜索了呢!:))

35

试试这个:

git log --graph --decorate 
+5

您还应该添加'--oneline'标志以充分利用您的屏幕空间。 – cmaster

2

你也可以试试这个:

git rev-parse --abbrev-ref --symbolic-full-name @{u} 

而在你的.gitconfig文件中使用此别名:

[alias] 
    showparentbranch = rev-parse --abbrev-ref --symbolic-full-name @{u} 

然后,您可以直接电话咨询:

git showparentbranch 

测试在Git版本2.10.2.windows.1

相关问题