2010-03-25 58 views
7

reflog vs GITK http://siteroller.net/archive/images/Forums/headless%20GIT.png混帳:HEAD已經消失,希望把它合併到主

頂部圖像的輸出:git的引用日誌。
底部是GIT GUI(msysgit)中GITK顯示的內容,當我查看所有分支歷史時。

最後幾個提交不顯示在GIT GUI上。

  • 爲什麼他們不顯示在GITK上(至少作爲一個分支或東西)?
  • 我該如何將它們合併爲主?
  • 我收集這件事時,我檢出了標籤0.42。爲什麼和主人不一樣? (我已標記最新狀態的主人)
  • 當我點擊推,爲什麼遠程回購聲稱是最新的..不應該嘗試更新這些提交到他們在任何分支?

第一個問題很重要 - 我想開始瞭解GIT的想法。在這一點上,它比邏輯更爲神諭。

如果它看到較早的歷史有所不同,該項目是一個[非常強大] JS顏色選擇器,可以是viewed here的整體。

+0

圖像被破壞(因此沒用),你能把圖像放在新的位置還是包含我們應該看到的ascii版本? – 2014-02-18 15:39:03

回答

10

爲什麼要將這些提交更新到他們所在的任何分支?

這只是它:你是不是對任何分支,但目前工作的一個detached head

從1.5.0版本開始,上面的命令你HEAD從當前分支,直接分離指向由標記命名的提交。

你可能會看到它,如果你做了gitk --all

一種方法來解決它(如果你犯了一切)

$ git log -1 
# note the SHA-1 of latest commit 
$ git checkout master 
# reset your branch head to your previously detached commit 
$ git reset --hard <commit-id> 

另一種方法是將您的工作合併到當前主正好在標籤處的頭部:

$ git checkout -m 0.42 

但是這會丟失您提交的歷史m在一個獨立的頭上。


我收集這些發生了,當我檢查了標籤0.42。爲什麼和主人不一樣? (我標記了主人在其最新狀態)

不,它不是主人。由於Jefromi在評論中指出,分支可以移動(或被重命名,或刪除,或...)
master指的是相同的提交比'0.42'標記,但事實並非總是如此。
結帳標籤,你不簽出一個分支,因此'分離HEAD'狀態。


注:在this SO answer提到的,@{1}符號你看到的是$(git symbolic-ref HEAD)@{1},即,它是使用電流(這裏分離的)分支,而不是引用日誌HEAD引用日誌。

+0

說明:您檢出了指向該特定提交的標記。它沒有指向分支。 (它不能 - 分支可以移動!)分支和標籤恰好恰好在同一個地方。你檢出標籤,但是,所以git檢查出提交併分離你的頭部。 – Cascabel 2010-03-25 20:23:35

+0

@Jefromi:我仍在編輯答案,其中一個最新的編輯提及只是你的澄清;) – VonC 2010-03-25 20:24:37

+0

因爲我簽出了一個標籤 - 可以移動 - 然後開始改變的東西,我在一個分離的頭上。分離的頭不是分支,因此不會遠程顯示或更新。明白了,雖然我還是不明白爲什麼不[儘管你對其他線索發表評論]。 我不明白合併指示。我已經完成了結賬工作,掌握了提交的SHA(請參閱reflog圖像)。我現在剛剛重置 - 哈?如果是這樣,哪個commit-id .. b88fd04? – SamGoody 2010-03-25 21:35:39

2

復活提交的最簡單方法是將一些分支頭指向它們。你知道SHA值,所以很容易:

git branch resurrected_junk 1b8c11d 

(這是一個SHA從截圖看),可能還

git branch resurrected_junk [email protected] 

這將指向一個分支最近你丟失的提交 - 較早的可能是最近一個的父母,所以他們將在這個新的分支上;如果它們不是(這意味着有兩個丟失提交的「影子分支」),則必須檢查所有提交,並重新提交缺失提交的過程。

在你的情況,我想你會得到一個歷史是這樣的:

Master --> Optimize toRGB --> ... ---> shortened toRGB = resurrected_junk 

然後,刷新gitk視圖和提交應該顯示。 (我正在使用qgit,所以我只是猜測)

之後,你應該能夠合併/推/任何想要他們的願望(如你所願)。

+0

請更具描述性 - 我不明白。我要做哪些提交resurrected_junk;我最早的分離提交,最新的還是所有的提交?此外,這意味着什麼「也可以」..如果我做混帳分支resurrected_junk HEAD @ 1,那麼我會在我需要它的主人身上愉快地擁有一切嗎?我是否需要分支才能合併在一起? – SamGoody 2010-03-25 21:38:33

+0

最新的提交; 「也可以」意味着HEAD @ 1在你的情況下只是1b8c11d更方便的名字。它不會把你的提交變成主人,會有另一個分支。如果你願意的話,你可以將它合併到master中;它應該是一個簡單的快速合併在你的情況。 – jpalecek 2010-03-25 22:05:37

3

在Git中,提交形成一個有向非循環圖,其中每個提交指向一個或多個父提交。除了提交對象之外,還有ref(即引用)對象:分支和標記。他們指向提交圖中的各種提交。你的問題是當你提交併且沒有分支(或標籤)指向它們時,你不在分支上。在任何時候,你可以使用命令

git status 

git branch 

檢查是否是一個分支或沒有。

爲什麼他們不顯示在GITK(至少作爲一個分支或東西)?

據我所知Gitk查找從裁判開始的提交對象。如果沒有引用指向你的提交(或指向它們的提交的有向無環圖),它們實際上是不可見的。

我該如何將它們合併爲主?

幸運的是,reflog工具跟蹤檢出和提交(等等)的操作。在你引用日誌列表,你可以看到該條目上次提交:

1b8c11d HEAD @ {1}承諾:縮短toRgb()函數

你應該能夠在提交合併到主分支使用您在引用日誌看到SHA1 ID:

git checkout master 
git merge 1b8c11d 

我收集這些發生了,當我檢查了標籤0.42。爲什麼和主人不一樣? (我標記了主處於最新狀態)

分支和標記之間的主要區別是標記始終指向相同的提交,但分支向前移動。例如,如果您在分支「主」上並進行新的提交,「主」分支向前移動並開始指向剛剛創建的新提交。當你簽出提交,標籤或分支時,Git會毫不誇張地執行你的命令,並檢查你所要求的內容。

當我點擊推送,爲什麼遠程倉庫聲稱是最新的..不應該嘗試更新這些提交到他們在哪個分支?

您的提交信息不在任何分支機構。您首先需要將它們合併到一個分支(例如,掌握),如上所示。之後推動應該正常工作。

+0

我跟着這個'''git log -1'''。 – DesignerGuy 2013-01-27 23:22:27