2011-06-23 45 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

相關問題