2010-08-24 106 views
17

在git中,我可以通過說HEAD^HEAD~1來指定以前的修訂版本。那麼去其他方式呢?假設我在版本X上,並且我做了git checkout X^。我該如何回去?`git diff HEAD ^`的反義詞是什麼?

類似git checkout X+

+4

你真的想要HEAD的對立面嗎?還是隻想「回去」?(你可以回頭看看HEAD @ HEAD @ {1}。) – nschum 2010-08-24 14:10:26

回答

29

你無法真正做到這一點。 git中的歷史記錄是一個有向的非循環圖 - 每個提交包含對其父母的引用,但是父母沒有引用他們的孩子。

這裏的問題應該會變得很明顯,當你考慮你創建多個分支的提交時。你的意思是「下一個承諾」?和父母一起,你可以數字化(一個正常的合併提交有第一個和第二個父母),但你如何與孩子做這件事?即使你知道你在想什麼分支上(例如,你已經簽出master~4,現在你想看看master~3)它不是明確的 - 你可以在這樣的情況:

- X (HEAD) - o - o - o - Y (master) 
    \     /
    o - o - o ---------- 

這就是說,在簡單的情況下,你可以做這樣的事情:

git checkout $(git rev-list HEAD..master | tail -n 1) 

清楚,會很好地工作線性的歷史。與合併... rev-list作品從現在到過去的歷史,跟着它落後。我相信它首先跟在第一個父母身後,所以最後打印的東西將是在跟隨所有最後父母后發現的HEAD之後的提交。

編輯:這的確假設你知道你想向哪個分支前進。如果你不......嗯,你幾乎看卡上的所有裁判對於具有當前HEAD父提交 - 大概grepping的git rev-parse輸出:

git rev-list --all --children | grep ^$(git rev-parse HEAD) 

然後搶在對方從SHA1該行(使用awk,無論)。你將不得不手動檢查或作出任意選擇,如果有多個結果,但...

2

我不認爲這是可能的,因爲一個Git提交只存儲它的提交,但不是它的子。

想象一下提交會存儲它的子項。如果您要在此提交中創建多個分支,會發生什麼情況,因此多次提交將此提交作爲父項?那麼什麼是「頭+」?這是模棱兩可的,錯誤的。

在我從數據結構中知道的內容中講到: Git將歷史存儲爲單鏈表,而您的操作需要雙鏈表。

+0

這比這更糟糕 - 即使父母知道孩子,也可以看到我關於歧義的答案。 – Cascabel 2010-08-24 14:06:39

2

據我可以告訴有沒有象徵性的方式來引用提交的孩子。

剛纔我可以給你的最好的是--children選項git rev-list。在這裏,我要求最近四次提交的內容相當漂亮,並附上有關其子女的信息。請注意,在每個條目(除最近的)的「提交」行上,都有一個額外的提交編號,它指定該節點的子節點。你可以通過手動或通過一些shell腳本來獲取孩子。

$ git rev-list --children --pretty HEAD~3... 

commit 20dba296ad1d48ec90f9319e2c13b245e849f698 
Author: Somebody <[email protected]____.net> 
Date: Thu May 6 19:10:38 2010 -0400 

    Support for complex trig/pow. 

commit 9d42b5bac1721a847a39c25672e577c7101c8ff0 20dba296ad1d48ec90f9319e2c13b245e849f698 
Author: Somebody <[email protected]____.net> 
Date: Wed May 5 21:55:07 2010 -0400 

    Fix doc formatting warning. 

commit 72bed3baa9df71cb224dfa8388b5969d50f5567c 9d42b5bac1721a847a39c25672e577c7101c8ff0 
Merge: b8244cb61491c9cdb83d36e57f8eb49773e44f6b 899c3dd3f9f419f200b84ca0abe59d7ac3d5bb53 
Author: Somebody <[email protected]____.net> 
Date: Wed May 5 21:54:59 2010 -0400 

    Merge branch 'master' 

commit 899c3dd3f9f419f200b84ca0abe59d7ac3d5bb53 72bed3baa9df71cb224dfa8388b5969d50f5567c 
Author: Somebody <[email protected]____.net> 
Date: Wed May 5 21:19:11 2010 -0400 

    Fix link 
相關問題