撤消 Git 中的更改

John Wachira 2024年2月15日
  1. 使用 git log 命令檢查 Git 中的提交歷史
  2. 使用 git clean 命令撤消 Git 中的更改
  3. 使用 git revert 命令撤消 Git 中的更改
  4. 使用 git reset 命令撤消 Git 中的更改
撤消 Git 中的更改

本教程介紹了撤消對本地和遠端倉庫所做更改的各種命令。這些命令包括:

  1. git clean
  2. git reset
  3. git revert

使用 git log 命令檢查 Git 中的提交歷史

讓我們首先看看我們如何檢查我們的提交歷史。我們使用 git log 命令檢查這一點。

pc@JOHN MINGW64 ~/Git (main)
$ git log
commit 195e5c362975354d62ebc469da2e3cd276c7da03 (HEAD -> main)
Author: John <wachirajohnie11@gmail.com>
Date:   Mon Feb 21 12:11:12 2022 +0300
commit 7b19db4b35c1ca15e5ecb8df1f805d44aad62e5f
Author: John <wachirajohnie11@gmail.com>
Date:   Mon Feb 21 10:09:31 2022 +0300
   first commit

該命令僅顯示你的工作分支的歷史記錄。要檢查所有分支,請使用以下命令。

git log --branches=*

使用 git checkout 命令檢視特定的提交,如下所示。

git checkout

現在你可以訪問檔案而不會篡改專案的當前狀態。使用 git checkout main 命令返回到當前專案工作區。

使用 git clean 命令撤消 Git 中的更改

我們使用 git clean 命令撤消對未跟蹤檔案的更改。你無法撤消 git clean 命令。

  1. git clean -n 選項充當試用命令。它只顯示未跟蹤的檔案,但不會刪除它們。

    例子:

    pc@JOHN MINGW64 ~/Git (main)
    $ git clean -n
    Would remove Hello world.txt
    Would remove Test1.txt
    
  2. git clean --force 命令刪除工作目錄中所有未跟蹤的檔案和資料夾。你可以使用 .gitignore 命令丟擲異常。

    例子:

    pc@JOHN MINGW64 ~/Git (main)
    $ git clean --force
    Removing Hello world.txt
    Removing Test1.txt
    

    讓我們檢查檔案是否在我們的目錄中。

    pc@JOHN MINGW64 ~/Git (main)
    $ git status
    On branch main
    nothing to commit, working tree clean
    

輸出顯示一個乾淨的分支。該命令成功刪除了檔案。

使用 git revert 命令撤消 Git 中的更改

git revert 命令作用於提交所做的更改並覆蓋它。我們用它來回到某個點並進行更改。

讓我們使用命令來更改我們的 first commit

git revert first commit
#[first commit [7b19db4] Revert 'first commit'
#1 file changed, 1 deletion(-)

你必須通過提交參考。

使用 git reset 命令撤消 Git 中的更改

我們將介紹的最後一個命令是 git reset。該命令在 HEAD 上執行。

  1. git reset --hard 選項更改指定的提交。但是,暫存索引和工作目錄中的任何更改都與更改相匹配。所有暫存的提交都會在此過程中丟失。

    例子:

    $ git reset --hard
    HEAD is now at 78129a6 Revert "$first commit"
    

    該命令對 HEAD 執行硬重置。

  2. git reset --mixed 命令將臨時索引中的更改儲存到你的工作目錄。

    例子:

    $ git reset --mixed
    Unstaged changes after reset:
    M       .bash_history
    M       text.txt.txt
    M       text.txt.txt.bak
    

    該命令已將未完成的更改從輸出中儲存到我們的工作目錄中。讓我們檢查一下我們分支的狀態。

    $ git status
    On branch main
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
    		modified:   .bash_history
    		modified:   text.txt.txt
    		modified:   text.txt.txt.bak
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    		.bash_history.bak
    no changes added to commit (use "git add" and/or "git commit -a")
    
  3. git reset --soft 命令僅更改提交歷史記錄。預設指標始終是 HEAD

    例子:

    pc@JOHN MINGW64 ~/Git (main)
    $ git reset --soft
    pc@JOHN MINGW64 ~/Git (main)
    $ git status
    On branch main
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
    		modified:   .bash_history
    		modified:   text.txt.txt
    		modified:   text.txt.txt.bak
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    		.bash_history.bak
    no changes added to commit (use "git add" and/or "git commit -a")
    

    從上面的輸出中,我們的工作目錄和暫存索引保持不變。使用提交的雜湊值來重置特定的提交。

作者: John Wachira
John Wachira avatar John Wachira avatar

John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.

LinkedIn

相關文章 - Git Reset