Git 中的重置和恢復
Git 有一些命令可以處理單個檔案,但它們很少見。這些命令是 git add
、git rm
、git mv
、git checkout
、git reset
、git restore
,以及它們各自的對立面。
不過,Git 很聰明。它會記住我們從哪裡獲取了我們已經獲取的工作,以便它可以稍後從下一個獲取標記再次獲取它。這意味著我們可以擁有一個僅包含我們在本地建立的提交的 Git 倉庫。如果我們已經從另一個倉庫中獲取了相同的提交,Git 可以避免再次獲取它們。
在本文中,我們將討論 Git 的兩個重要命令:
git restore
git reset
Git restore
命令
Git restore
命令用於從索引或另一個提交中恢復工作樹中的檔案。此命令不會更新當前分支。它還可以從另一個提交中恢復索引中的檔案。如果我們想使用與當前分支上的提交不同的提交中的程式碼,這將非常有用。restore
命令有助於丟棄本地分支中未提交的本地更改。
Git restore
可以在三種不同的情況下使用,具體取決於當前情況,我們是否希望恢復工作副本或索引中的工作,或兩者兼而有之。
git restore [--worktree] <file>
上面的命令將覆蓋我們工作副本中的 <file>
以及索引檔案中的內容。或者我們可以說它恢復了我們在工作副本中所做的更改。我們是否指定它並不重要,因為如果我們不另外說,它是建議性的。
git restore --staged <file>
上面的命令將使用本地倉庫中的當前 HEAD 覆蓋索引檔案中的 <file>
。或者我們可以說未提交的更改最近上演的內容。如果我們說它確實等於舊的 git reset HEAD <file>
,那不會錯。
git restore --staged --worktree --source HEAD <file>
如上所述,要使用當前 HEAD 覆蓋工作副本和索引,我們使用上述命令。這個版本將能夠做到這兩點:將我們的工作副本恢復到 HEAD 以及從當前本地分支恢復未暫存的最近暫存的工作。
Git 重置
命令
Git reset
是關於更新我們的分支,移動提示以從分支中新增或刪除提交。此操作更改提交歷史記錄。Git reset
用於恢復索引,與 Git restore
重疊。如果檔案被更改,無論是通過使用手動編輯還是通過 git add 方法,git reset
都不能很好地處理它。
該檔案被複制到新提交,然後在舊提交中標記為已刪除。它會發出警告,表明該檔案似乎已從工作副本中刪除。Git reset 也不能很好地處理重新命名。這並不意味著刪除檔案並新增同名檔案,但確實如此。
reset
命令不能用於移動工作副本中的檔案。這些檔案不僅被複制到不同的提交;它們從工作副本中刪除並在目標提交中恢復為新檔案。當我們對檔案進行了不必要的更改時,沒有必要刪除該檔案。我們可以撤消對檔案的所有更改,但它不會撤消檔案本身。
git reset
和 git restore
之間的區別
restore
命令幫助我們取消暫存或丟棄未提交的本地更改。它可用於從索引或其他提交恢復工作樹中的檔案。此命令不會更新我們的分支。從另一個提交中恢復索引中的檔案也很有幫助。
Git reset
用於更新當前分支。恢復索引也很有幫助,與 git restore 相交。Git reset
用於重置索引以丟棄工作樹中的更改。此命令不會更新我們的分支。它主要與 --soft
選項一起使用,該選項僅重置索引並保持工作樹不變。如果我們暫存了不想丟棄的更改,這將很有用。
如果工作目錄是乾淨的(沒有要提交的更改),Git reset
將成功完成,而如果工作目錄是乾淨的,則 Git Restore
將失敗。兩者都會影響 HEAD。然而,Git restore
只會通過暫存區間接影響 HEAD。Git reset
可以直接使用索引和 HEAD。兩者都會影響 HEAD。Git restore
只會通過暫存區間接影響索引和 HEAD。
僅當我們還沒有推送任何內容時,Git reset
才能用於修改本地倉庫。如果我們已經推送到遠端伺服器,git-reset 將修改暫存區和工作副本,但不會修改倉庫。如果我們想撤消本地更改但不想再次重新引入它們,這很有用。
Git restore
是相反的,因為它只能用於修改我們的倉庫,而不是暫存區或本地工作副本。它不會影響我們推送的任何提交。
Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.
LinkedIn