2012-03-27 79 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 

向下滾動,直到看到「配置‘混帳拉’本地分支:」那下面,則顯示你所有的地方分支機構的列表,每個將合併遠程分支。