$ git reset -- <file_path>
可以通過路徑重置。因爲沒有點(其他命令提供該功能的話),並減少潛在的意外做錯事爲什麼git無法通過路徑進行硬復位/軟復位?
Cannot do hard|soft reset with paths.
$ git reset -- <file_path>
可以通過路徑重置。因爲沒有點(其他命令提供該功能的話),並減少潛在的意外做錯事爲什麼git無法通過路徑進行硬復位/軟復位?
Cannot do hard|soft reset with paths.
:
然而,$ git reset (--hard|--soft) <file_path>
會報告錯誤,如下面。
一個路徑的「硬重置」剛剛通過git checkout HEAD -- <path>
(檢出文件的現有版本)完成。
路徑的軟重置沒有意義。
路徑的混合重置是git reset -- <path>
所做的。
你可以使用git checkout HEAD <path>
來完成你想要做的事情。
也就是說,提供的錯誤信息對我來說沒有意義(因爲git reset
在子目錄上工作得很好),我沒有理由爲什麼git reset --hard
不應該完全按照您的要求進行操作。
問題如何已經answered,我將解釋爲什麼部分。
那麼,git reset是做什麼的?根據指定的參數,它可以做兩個不同的東西:
如果指定的路徑,它取代了(默認爲HEAD)與文件索引從提交匹配的文件。這個動作根本不影響工作樹,通常用作git add的反義詞。
如果不指定路徑,它會將當前分支頭移動到指定的提交,並且和一起可選地將索引和工作樹重置爲該提交的狀態。這額外的行爲是由模式參數控制:
--soft:不要觸摸索引和工作樹。
- 混合(默認):重置索引但不是工作樹。
--hard:重置索引和工作樹。
還有其他選項,請參閱完整列表和一些使用案例的文檔。
當您不指定提交時,它默認爲HEAD,所以git reset --soft
將不執行任何操作,因爲它是將頭移動到HEAD(到其當前狀態)的命令。另一方面,git reset --hard
,由於它的副作用,它說移動頭到頭和重置索引和工作樹頭。
我認爲現在應該清楚爲什麼這個操作不是針對特定文件的本質 - 它首先打算移動分支頭,重置工作樹並且索引是次要功能。
我個人認爲,'混帳結帳 -'應該*代替*用'git的復位 - 硬'。它使得更有意義... –
vergenzt
'git結帳 -'不會做硬重置;它用工作內容替換工作樹內容。 'git checkout HEAD - '對路徑進行硬重置,用HEAD提交的版本替換索引和工作樹。 –
請看看鏈接的問題:http://stackoverflow.com/questions/15404535/how-to-git-reset-hard-a-subdirectory。任何想法? – krlmlr