云网牛站
所在位置:首页 > Linux命令 > 使用git reset命令撤销上次Git提交

使用git reset命令撤销上次Git提交

2020-11-07 09:48:30作者:吴增景稿源:云网牛站

本文介绍如何撤消上一次的Git提交的方法。

使用git reset命令撤销上次Git提交

 

前言

有时,在使用Git时,您可能要撤消最新的提交。提交是给定时间的Git存储库的快照,Git有一个称为HEAD的引用变量,它指向当前工作分支中的最新提交,要撤消提交,只需将HEAD变量指向先前的快照即可。不建议撤消已将提交推送到共享存储库的提交。如果您只想更改提交消息,请查看本文。

安装Git参考:在Debian 10 Linux系统上安装Git及配置Git的方法

 

Git三树架构

在Git中,您可以使用git reset命令和提交标识符来撤消更改。

git reset使用其他参数,使您可以控制命令行为。为了更好地了解重置的工作方式,我们来讨论一下Git的三棵不同的树,三树架构是Git管理系统的关键概念,它们之所以称为树,是因为它们代表文件的集合。

Git管理和操作以下三棵树:

1、工作目录-一个目录,包括与存储库关联的本地文件系统上的所有子目录和文件,它通常被称为“工作树(working tree)”,工作目录类似于沙箱,您可以在其中测试更改,然后再将其提交到暂存索引。

2、索引-此树跟踪使用git add添加到索引中的新文件或更改文件,这些文件将包含在下一次提交中,它通常称为“登台区域(staging area)”或“登台索引(staging index)”。

3、HEAD-指向当前分支上最后一次提交的指针。

git reset命令具有与三个树对应的三个参数:

1]、--soft-将HEAD指针更新为给定的提交,工作目录和索引不会更改。

2]、--mixed-更新HEAD指针,并将Index重置为指定的提交,工作目录保持不变,这是reset命令的默认操作模式。

3]、--hard-更新HEAD指针,并将Index和Working目录重置为指定的提交,使用此选项时要格外小心,因为所有您尚未提交的本地更改都会被覆盖并丢失。

 

撤消最后一次提交

要撤消上一次提交而不丢失对本地文件和索引所做的更改,请使用--soft选项和HEAD~1调用git reset:

git reset --soft HEAD~1

HEAD~1是指向先前提交的变量。上面的命令将当前分支后移一个提交,从而有效地撤消您的最后一个提交,如果您运行git status命令,则会看到已更改的文件被列为未提交的更改。

要更新HEAD指针以重置索引,请使用--mixed或不带选项运行git reset:

git reset --mixed HEAD~1

git reset HEAD~1

更改的文件会保留下来,但是与前面的示例不同,现在不会暂存更改以进行提交。

如果您不想保留对文件所做的更改,请使用--hard选项调用git reset命令:

git reset --hard HEAD~1

在执行硬重置之前,请确保您不再需要任何更改。

 

撤消多次提交

使用git reset,您可以返回到以前的任何提交。

例如,要将当前分支移回三个提交,可以使用:

git reset --hard HEAD~3

由于我们使用的是--hard,因此上面的命令将从提交历史记录中删除最新的三个快照。

移回特定提交的另一种方法是将提交ID传递给git reset命令。

使用git log --oneline查找提交ID:

git log --oneline

该命令将显示所有提交的列表,包括ID和提交消息的第一行:

32921222 (HEAD -> master) Update changelog

7505724c adding new tests

750862ce new blog post

95a63417 sort configuration file

252032e4 Refactor User class

...

一旦知道要重置的提交的ID,只需将ID传递给git reset命令即可:

git reset --hard 95a63417

 

结论

要撤消上一次提交,请使用git reset命令。不要重置推送的提交,因为这可能会给您带来很多问题。

 

相关主题

git命令_Linux git命令使用详解:讲述git的使用方法

Linux命令子频道
精选文章
热门文章