Git分享(3)- 撤销操作

30 阅读3分钟

撤销提交的代码。

stash的应用

在Git中,有多种撤回提交或更改的方式,取决于你想要完成的具体操作:

  1. git reset --soft: 这个命令会移动HEAD指针到指定的提交,并将中间的提交添加到暂存区,但不会更改工作目录。这通常用于撤销提交,但保留更改以供再次提交。

    例如,要撤销最后一次提交,可以使用以下命令:

    git reset --soft HEAD~1
    
  2. git reset --mixed: 这个命令将移动HEAD指针到指定的提交,并将中间的提交撤销到工作目录,但不会更改暂存区。这通常用于撤销提交,并将更改移回工作目录,但不将它们标记为待提交。

    例如,要撤销最后一次提交并将更改移回工作目录,可以使用以下命令:

    git reset --mixed HEAD~1
    
  3. git reset --hard: 这个命令将会撤销到指定的提交,并且会清除暂存区和工作目录的所有更改。这是一个破坏性的操作,因此请谨慎使用。

    例如,要彻底撤销最后一次提交以及任何未提交的更改,可以使用以下命令:

    git reset --hard HEAD~1
    
  4. git revert: 这个命令会创建一个新的提交,该提交的更改与你要撤销的提交的更改相反。这意味着你的提交历史不会改变,但你的代码会回退到指定提交之前的状态。

    例如,要撤销最后一次提交并保留提交历史,可以使用以下命令:

    git revert HEAD
    
  5. git checkout: 如果你想要丢弃工作目录中的所有未提交的更改,可以使用这个命令。这不会影响提交历史。

    例如,要丢弃工作目录中的所有未提交的更改,可以使用以下命令:

    git checkout -- .
    
  6. git stash: 这个命令可以保存工作目录和暂存区的当前状态,以便稍后恢复。这对于你需要临时切换到其他任务,但不想提交当前的更改非常有用。

    例如,要保存当前的更改并清空工作目录和暂存区,可以使用以下命令:

    git stash
    

    然后,你可以使用以下命令来恢复之前的更改:

    git stash pop
    

请注意,这些命令中的一些(特别是git reset --hardgit checkout)可以删除你的更改,因此在使用前请确保你了解它们的行为,并确保你的重要更改已经保存或提交。

git restore 是在 Git 2.23 版本中引入的一个新命令,它的主要目的是将一些常用的工作流程与 git checkout 命令分离,使得 Git 命令更加直观和易于理解。

git restore 命令主要用于撤销工作目录或暂存区(也就是 Git 的索引)的更改。这是一个安全的操作,因为它不会影响 Git 仓库中的提交历史。

以下是 git restore 的一些常见用法:

  1. 恢复工作目录中的文件:如果你在工作目录中修改了一个文件,但现在想要丢弃这些更改并恢复文件到上次提交的状态,你可以使用 git restore

    git restore my-file.txt
    

    这将会撤销 my-file.txt 中的所有未提交的更改。

  2. 从暂存区恢复文件:如果你已经使用 git add 将一个文件添加到了暂存区,但现在想要撤销这个操作并将文件恢复到未添加状态,你可以使用 git restore --staged

    git restore --staged my-file.txt
    

这将会从暂存区移除 my-file.txt,但不会撤销对文件本身的更改。

在使用 git restore 命令时,请注意它只会撤销未提交的更改。一旦你使用 git commit 创建了一个新的提交,这些更改就会成为 Git 仓库的历史的一部分,此时你需要使用其他的 Git 命令(例如 git revertgit reset)来撤销它们。