我想查看我的主分支上的最後五個提交。我做的:如何查看主人提交?
git checkout master
git log -p -5
我看到那個承諾我敢肯定不在主。 因爲一個人的消息:
Merge branch 'feature/ABLE-1370' into develop
任何明顯我做錯了嗎?
我想查看我的主分支上的最後五個提交。我做的:如何查看主人提交?
git checkout master
git log -p -5
我看到那個承諾我敢肯定不在主。 因爲一個人的消息:
Merge branch 'feature/ABLE-1370' into develop
任何明顯我做錯了嗎?
很可能您遇到的問題是「在分支上」的真正含義。
在做簡單的,線性的發展歷史,很顯然每一次提交該分支上。這是對只有一個(或者,在技術上,最多一個)分支:
$ git checkout branchA
... hack away for a while ...
$ git commit -a -m "new stuff for A" # new commit is on branchA
$ git checkout branchB
... hack some more ...
$ git commit -a -m "new stuff for B"
但是當你開始合併不同的分支,會發生什麼?你所做的每branchA及以上branchB的一個承諾後,你可能有這樣的事情:
...-C3--C6 <-- branchA
...-C4--C5--C7 <-- branchB
其中每個Cn
代表提交。該名branchA
點提交C6
,這是你與「爲一個新的東西」作出的一個,和名字branchB
點提交C7
,這是你與「對於B新東西」作出的一個。 (C3
和C4
當你開始已經存在C6
點回C3
作爲其母公司,這是我們如何能夠遵循branchA
向後的歷史;以及C7
點C5
,這反過來又指向C4
,等等。)
現在假設你回到branchA
和git merge branchB
。這使得「合併提交」 - 我們可以把它提交C8
,但我們把它叫做M
的合併:
$ git checkout branchA
$ git merge branchB
這改變了「提交圖」,現在我們有這樣的:
...-C3--C6-----M <-- branchA
/
...-C4--C5--C7 <-- branchB
新的合併提交,M
,有父母,提交C6
和C7
。標籤branchA
已更改爲指向承諾M
。
如果我們按照M
向後,看看哪些是提交「的分支」,我們將井,git會,所以我們應該過: - ) - 跟隨雙方父母。提交C7
現在「在分支上」,提交C5
和C4
以及之前的任何歷史記錄都在C4
之前。
然後,您可能會想知道在合併引入「一堆以前不相關的,但現在在婚姻中的家庭」提交之前,如何判斷哪個提交「最初」在分支上。
完全一般的答案是「你不能」。這是因爲標籤 - 分支名稱像branchB
-不是永久性的。目前,很明顯,犯C7
和它的歷史只是現在結婚了,但如果我們刪除branchB
標籤:
$ git branch -d branchB
那麼我們就只剩下這個畫面:
...-C3--C6-----M <-- branchA
/
...-C4--C5--C7
有時以下只有合併的「第一個父母」纔會給出「合理準確」的「主線」圖片,而git的--first-parent
標誌只跟隨每個合併的第一個父代。
這種事情「自然產生」,當兩個不同的開發商克隆一些共享資源庫項目,都使(不同的)變化的一些分支,然後他們決定合併他們的更改。假設卡爾有四次提交回購:
A--B--C--D <-- master
愛麗絲使一個副本,並將提交E
:
A--B--C--D--E <-- master
鮑勃使得卡爾的原件和複印件,並增加了提交F
:
A--B--C--D--F <-- master
愛麗絲和鮑勃都告訴卡爾他們偉大的新功能或錯誤修復,卡爾決定他想要兩個。他可以用git fetch
(與git remote add
和這樣一起)以使其:
E <-- remotes/alice/master
/
A--B--C--D <-- master
\
F <-- remotes/bob/master
卡爾現在可以用一個簡單的兩個步驟合併這兩個進他(卡爾)回購。步驟一,做一個快進合併撿東西(比方說愛麗絲的變化):
$ git merge alice/master
Updating b6636ec..a430f6d
Fast-forward
[snip]
這給了(我將離開remotes/
出了名的了):
E <-- master, alice/master
/
A--B--C--D
\
F <-- bob/master
下一頁:
$ git merge bob/master
這有可能做一個真正的合併提交(它確實是這樣,merge made by recursive
和所有),贈送:
E <-- alice/master
/\
A--B--C--D M <-- master
\/
F <-- bob/master
如果Alice和Bob現在取從卡爾的最新更新,他們已經有了自己的本地分支名稱(艾麗斯打電話E
的master
尖端),他們沒有得到對方的名字(愛麗絲不「請參閱「鮑勃在這裏,只有卡爾」看到「鮑勃),所以愛麗絲添加承諾F
沒有標籤,M
與標籤origin/master
(或者,如果她對名稱挑剔,她會重命名爲carl
,以便這是carl/master
)。然後,她可以將自己的master
指向M
:
A--B--C--D-E-M <-- master, origin/master
\/
F
鮑勃同樣可以在新帶來的提交,對他來說,他們是E
和M
代替F
和M
(但M的「第一父」仍然是E
):
A--B--C--D-E-M <-- origin/master
\/
F <-- master [before Bob does the merge]
如果Bob選擇他master
標籤向前滑動(如快進合併),他現在看到的圖片完全一樣愛麗絲..
因此,對於提交E和F,他們在哪個分支上?他們只是「主人」,他們甚至製造「在主人」,但卡爾並沒有使他們「在主人」,愛麗絲和鮑勃每個只做一個「在主人」。最後,git給你的唯一東西就是最終的提交圖。
要查看提交圖表,你可以使用gitk
作爲意見提出,或:
git log --graph
我覺得這是特別有用當--decorate --oneline
給出。添加--all
以查看所有分支,和/或-number
或-n number
(如在-5
或-n 5
中)以限制看到的提交數量。
嘗試使用可視化工具。例如gitg,gitk。否則,這種合併可能是正常的。在git中,分支頭是歷史中的指針,這樣提交可以同時存在於更多分支中。在你的情況下,如果相關提交的後繼者被合併爲主,那麼這可能是正常的。 –