2016-07-19 110 views
-1

我知道git reset命令在歷史記錄(*)中向後移動一個分支,並且它移動的分支是HEAD指向的分支。Git reset in detached HEAD狀態

所以我很好奇,我試圖在detached HEAD state中打電話來看看會發生什麼。我期待錯誤,但git做了一些事情,我只是無法弄清楚它做了什麼。

Git的行爲像HEAD仍然指向我檢查出去之前,並進入detached HEAD state


[編輯1]事實上,我理解了它。它與不處於分離頭部狀態時的情況完全相同,只是它不會向後移動任何分支。這是唯一的

[編輯2(*)]git reset實際上只指定一個較舊的承諾時,落後的歷史變化的分支。在做git reset HEAD時,它將離開分支(見下面的註釋)。

+0

你應該用你運行的確切命令來更新你的問題......有三種形式的git reset ...每個都有參數..最常見的用途是執行git add oposite操作... –

+0

I'不確定這件事很重要。由於每個版本的git reset都至少會做一件事情:它將當前分支移動到不同的位置。而且,因爲在一個獨立的頭部中並沒有真正的當前分支,所以我想知道會發生什麼 – Radioreve

回答

3

git reset使當前分支和HEAD移動到特定提交。如果它是一個分離的HEAD,它只會使HEAD移動。

+0

事實上,我剛剛檢查過,只有HEAD動作。但後來git告訴我,我已經取消了文件,這就是我想知道的。那些文件是什麼?他們是我從頭部提交的頭文件,還是我剛剛簽出的頭文件(當時我提交的那些文件) – Radioreve

+0

@Radioreve'git reset'有一些選項,如'--soft ',' - 混合',' - 硬'。 '--mixed'是默認值。假設提交歷史記錄是「A-B-C」。如果'git reset B',等於'git reset B --mixed',則HEAD移動到B,但從B到C的變化保持不分離。如果'git reset B --soft',所做的更改保持未提交。如果'git reset B --hard',則更改將被丟棄。在'git reset'後,運行'git status'來檢查。 – ElpieKay

-1

如果您剛剛運行:git reset

它執行的git add這是unstage變化相反的操作...

有三種形式的git reset命令,每一個與相關選項和執行不同的操作。如果您想深入瞭解,請查看git reset文檔。

2

只是強調:

我明白git的復位命令總是在歷史上向後移動一個分支,

這是不正確的,你可能需要編輯你的問題,以避免混淆新的git人。例如,git reset --hard不會這樣做,它只是在不移動HEAD或分支的情況下清除工作目錄和索引。

事實上,在git reset [<commit>]中省略可選<commit>的所有變體都不會移動頭部或分支。 git reset其他選項做其他事情,不是所有這些選項都移動HEAD。所以移動HEAD只是git reset可以做的幾個動作之一。

+0

你說得對,謝謝你指出。 – Radioreve

+0

從概念上講,'git reset' * *總是會移動HEAD,這就是說,如果你從現在的位置移動到現在的位置,那麼這個移動太小了,太快了:-)沒有人能看到你移動,他們拒絕相信你移動了。 :-)然而,你絕對正確的說,它不必向後移動:它可以移動到現在的位置(非移動的「移動」),向前移動或向旁邊移動(「跳躍軌道」到一個不相關的提交)。 – torek

+0

我看到你在那裏做了什麼......只是一點點跳到左邊...... – AnoE

相關問題