2011-12-11 37 views
5

如果您使用gitk --all,您可以從所有分支中看到所有提交的回購。我想要的東西除了只有給定提交的後代。如何獲得/列出/查看所有使用git(或gitk)提交的後代?

+1

雖然manojlds的第一句話是正確的,但這並不是全部的真相:可能會檢查某件事物是否可以檢查每個參考文獻是否在其祖先中有特定的提交,然後顯示從那些參考文獻開始的歷史記錄。 – Cascabel

+1

[獲取給定提交的所有子代的列表]的可能重複(http://stackoverflow.com/questions/2613935/getting-a-list-of-all-children-of-a-given-commit) – jthill

回答

2

一個承諾只知道它的父母(因此一直向上),但沒有關於其子女/後代的線索。您必須使用A..B這樣的符號來查找它。

例如,如果你想找到在提交當前分支,因爲給定犯,你可以做這樣的事情:

git rev-list A.. 
+1

'gitk --all'必須以某種方式工作。看起來有可能至少將它編碼爲第一個'gitk --all',然後忽略沒有給定提交的每個提交作爲其父。 – Pistos

7

我想這可能會做你想要什麼。在各分公司所有的提交,有A作爲祖先:

gitk --all --ancestry-path A.. 
1

簡而言之:

git log --all BRANCH~1.. 

在細節和例子:這是一個倉庫的整個樹我剛剛創建:

$ git log --graph --oneline --decorate --all 
* e3972be (HEAD, a) a-6 
* 2707d79 a-5 
* cdea9a7 a-4 
| * 65b716e (c) c-5 
| * ebe2a0e c-4 
|/ 
| * 2ed9abe (b) b-4 
|/ 
* ace558e (master) 3 
* 20db61f 2 
* 3923af1 1 

除了--all,另一件事是顯而易見的:master - >HEAD

$ git log --graph --oneline --decorate master.. 
* e3972be (HEAD, a) a-6 
* 2707d79 a-5 
* cdea9a7 a-4 

所以,我試圖將它們結合起來,它幾乎我了我們想要的:

$ git log --graph --oneline --decorate --all master.. 
* e3972be (HEAD, a) a-6 
* 2707d79 a-5 
* cdea9a7 a-4 
* 65b716e (c) c-5 
* ebe2a0e c-4 
* 2ed9abe (b) b-4 

但不幸的是,這並不表明分支之間的關係,因爲分支我們要求約被省略。因此,我們必須使用日誌從master父像這樣:

$ git log --graph --oneline --decorate --all master~1.. 
* e3972be (HEAD, a) a-6 
* 2707d79 a-5 
* cdea9a7 a-4 
| * 65b716e (c) c-5 
| * ebe2a0e c-4 
|/ 
| * 2ed9abe (b) b-4 
|/ 
* ace558e (master) 3 

噹噹! (我不知道這是否在過去不起作用,但只是在以下情況下:我在git版本1.7.1上)

編輯2017-11-17 - 感謝STW真正的顯示這個問題:獨立的樹會搞砸了。此輸出中將包含完全獨立於master的提交。從上述回購的副本開始,這是我的最後一個命令將輸出:

$ git checkout --orphan z 
Switched to a new branch 'z' 
$ git commit --allow-empty -m'z-1' 
[z (root-commit) bc0c0bb] z-1 
$ git commit --allow-empty -m'z-2' 
[z 1183713] z-2 

$ git log --graph --oneline --decorate --all master~1.. 
* 1183713 (HEAD -> z) z-2 
* bc0c0bb z-1 
* 6069f73 (a) a-6 
* 654d106 a-5 
* a218c59 a-4 
| * 338432a (c) c-5 
| * 2115318 c-4 
|/ 
| * 43a34dc (b) b-4 
|/ 
* ce05471 (master) 3 

z分支,創建作爲一個孤兒,與master沒有共同的歷史,所以z-1z-2應已排除但沒有。這是--ancestry-path的用途,我現在得到。包括將排除分支z

$ git log --graph --oneline --decorate --all --ancestry-path master~1.. 
* 6069f73 (a) a-6 
* 654d106 a-5 
* a218c59 a-4 
| * 338432a (c) c-5 
| * 2115318 c-4 
|/ 
| * 43a34dc (b) b-4 
|/ 
* ce05471 (master) 3 

爲了完整,甚至因爲它已經有了--ancestry-path,目前頂級的答案沒有正確顯示分支的關係,因爲它排除在master自己的承諾:

$ git log --graph --oneline --decorate --all --ancestry-path master.. 
* 6069f73 (a) a-6 
* 654d106 a-5 
* a218c59 a-4 
* 338432a (c) c-5 
* 2115318 c-4 
* 43a34dc (b) b-4 
+0

我試着擺弄這個變化,但它似乎並不能顯示我想要[用gitk]。例如,假設你創建了一箇中介子分支,並從那裏創建了3個孫子分支。只有那個家族的分支才能顯示gitk,而不是主人或其他任何人? – Pistos

+0

@Pistos所以使用上面的,當我使用'gitk --all master..'(而不是'git log --all master〜1..' - 所以,要使用除master以外的分支,請嘗試'gitk --all branchname..'(包括兩個點) – Izkata

+0

@Pistos我現在也注意到我的評論與jsvnm的答案几乎一樣,除了我不' t很明白'--ancestry-path'和爲什麼它是必要的 – Izkata

相關問題