Git 中的重置和恢復

Abdul Jabbar 2023年1月30日
  1. Git restore 命令
  2. Git 重置命令
  3. git resetgit restore 之間的區別
Git 中的重置和恢復

Git 有一些命令可以處理單個檔案,但它們很少見。這些命令是 git addgit rmgit mvgit checkoutgit resetgit restore,以及它們各自的對立面。

不過,Git 很聰明。它會記住我們從哪裡獲取了我們已經獲取的工作,以便它可以稍後從下一個獲取標記再次獲取它。這意味著我們可以擁有一個僅包含我們在本地建立的提交的 Git 倉庫。如果我們已經從另一個倉庫中獲取了相同的提交,Git 可以避免再次獲取它們。

在本文中,我們將討論 Git 的兩個重要命令:

  1. git restore
  2. 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 resetgit 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 Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

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

相關文章 - Git Reset

相關文章 - Git Restore