2012-06-26 50 views

回答

95

然而,$ git reset (--hard|--soft) <file_path>會報告錯誤,如下面。

一個路徑的「硬重置」剛剛通過git checkout HEAD -- <path>(檢出文件的現有版本)完成。

路徑的軟重置沒有意義。

路徑的混合重置是git reset -- <path>所做的。

+42

我個人認爲,'混帳結帳 - '應該*代替*用'git的復位 - 硬'。它使得更有意義... – vergenzt

+18

'git結帳 - '不會做硬重置;它用工作內容替換工作樹內容。 'git checkout HEAD - '對路徑進行硬重置,用HEAD提交的版本替換索引和工作樹。 –

+0

請看看鏈接的問題:http://stackoverflow.com/questions/15404535/how-to-git-reset-hard-a-subdirectory。任何想法? – krlmlr

12

你可以使用git checkout HEAD <path>來完成你想要做的事情。

也就是說,提供的錯誤信息對我來說沒有意義(因爲git reset在子目錄上工作得很好),我沒有理由爲什麼git reset --hard不應該完全按照您的要求進行操作。

-1

git reset --soft HEAD〜1 filename撤消提交,但更改仍保留在本地。 可能是 - 所有COMMITED文件

+4

致命'不能用路徑進行軟重置.' – alt

2

問題如何已經answered,我將解釋爲什麼部分

那麼,git reset是做什麼的?根據指定的參數,它可以做兩個不同的東西:

  • 如果指定的路徑,它取代了(默認爲HEAD)與文件索引從提交匹配的文件。這個動作根本不影響工作樹,通常用作git add的反義詞。

  • 如果不指定路徑,它會將當前分支頭移動到指定的提交,並且一起可選地將索引和工作樹重置爲該提交的狀態。這額外的行爲是由模式參數控制:
    --soft:不要觸摸索引和工作樹。
    - 混合(默認):重置索引但不是工作樹。
    --hard:重置索引和工作樹。
    還有其他選項,請參閱完整列表和一些使用案例的文檔。

    當您不指定提交時,它默認爲HEAD,所以git reset --soft將不執行任何操作,因爲它是將頭移動到HEAD(到其當前狀態)的命令。另一方面,git reset --hard,由於它的副作用,它說移動頭到頭重置索引和工作樹頭。

    我認爲現在應該清楚爲什麼這個操作不是針對特定文件的本質 - 它首先打算移動分支頭,重置工作樹並且索引是次要功能。