撤消 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