Git 中的重置和恢復

Abdul Jabbar 2023年1月30日 2022年4月22日
  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 是相反的,因為它只能用於修改我們的倉庫,而不是暫存區或本地工作副本。它不會影響我們推送的任何提交。

Author: 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