HOWTO · Git

在 Git 中撤消對單個檔案的本地更改

在 Git 中重置單個檔案的不同方法。

在本文中,我們將討論如何使用 git checkoutgit reset 等命令將檔案回滾到我們喜歡的版本。儘管 Git 使重置檔案和倉庫變得容易,但在 Git 中撤消更改的概念比你想象的要複雜一些。

撤消 repo 中的更改與撤消對你在本地處理的一組檔案的更改是不同的。

git checkoutgit resetgit restore 命令在將檔案回滾到以前的版本時會派上用場。但在深入研究這些命令之前,我們必須問自己;重置檔案是什麼意思?

值得注意的是,在不同的情況下,重置檔案可能會有所不同。你可能會發現 git checkout 命令與你的期望不符。

對於想要回滾已經提交的更改和想要撤消更改以使檔案與 repo 同步的人來說,這是不同的。

以下是你應該注意的一些術語,以瞭解這些差異。

  1. 工作樹
  2. 暫存區
  3. 倉庫

在 Git 中回滾之前提交的檔案

一個常見的情況是我們已經提交了一個檔案並想要撤消更改。在這種情況下,我們將使用 git checkout 命令。

我們之前使用該命令來切換分支,但這只是它可以做的一部分。

我們可以使用該命令撤消對已提交檔案的更改。它會將我們工作樹中的檔案與我們 repo 歷史中任何時候的檔案進行匹配。

我們可以指定分支、標籤和提交。

以下是執行該命令的最佳方式。

$ git checkout [commit ID] -- path/to/file

執行上面的命令時,我們將 Git 指向我們倉庫中的特定提交 ID。此外,我們還新增了單個檔案的路徑。

執行上面的命令只會更新我們工作樹中的檔案。我們將不得不暫存檔案並進行新的提交。

在 Git 中撤消對暫存和未暫存檔案的更改

我們的暫存區包含我們要提交的檔案。要撤消暫存檔案中的更改,請執行 git reset 命令取消暫存檔案。

$ git reset HEAD path/to/file

我們在暫存檔案之前執行以下命令來撤消本地更改。

$ git checkout -- path/to/file

該命令類似於我們的第一個命令,只是它省略了我們的提交 ID。

git restore 命令

較新版本的 Git 允許我們使用 git restore 命令撤消對單個檔案的更改。

以下是我們可以使用該命令的一些方法。

  1. 撤消對 repo 的更改

    $ git restore --source [commit id] path/to/file
    
  2. 取消暫存檔案

    $ git restore --staged path/to/file
    
  3. 撤消對工作副本的更改

    $ git restore path/to/file
    

我們經常發現自己回滾提交而不是重置單個檔案。但是,當你需要時,它相當簡單。