问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Git新手教程-撤销更改(七)

发布网友 发布时间:2022-09-24 14:59

我来回答

1个回答

热心网友 时间:2023-09-13 15:22

在前面的文章中,我们学习了标签、分支、和合并。现在我们将学习Git中另外的三个命令 git commit --amend , git revert , git reset 。下面简单的介绍中几个命令的功能:

在平时的项目开发中,有时候我们可能提交完相应文件后,才发现漏掉了几个文件没有添加,或者我们 commit 消息并没有书写完整或有错别字。那这个时候我们该整么办呢?或许我们会执行一个新的提交来添加我们遗漏的内容,但是这样一点都不优雅!!在Git中为我们提供了带有 --amend 选项的提交来修改我们 最近 的提交:

这里大家可能还是不是很明白,我们看下面这个简单的例子:

在上述例仓库中我们创建了一个 commit ,该 commit 消息并没有书写完整。这个时候我们想修改它,那么我们就可以使用命令 git commit --amend ,当输入该命令后,我们能得到如下弹窗:

这个时候,我们就可以完善该 commit 信息,然后保存并离开。这里我改成了 删除了多余的语句 ,这时我们再使用 git log 命令,我们会发现我们的 commit 消息已经被更改了。如下所示:

当然在上述例子中,我们只是简单的修改了 commit 信息,并没有修改或添加一些新的文件,如果你修改或添加了新的文件,并想将这些修改的文件添加到最近的 commit 中去的话,那么你可能要经历以下步骤:

在实际的项目中,如果你想修改最近的 commit ,那么你需要使用 git commit --amend 来更新最近的 commit ,而不是创建新的 commit 。

在上述例子中,我们知道了如何修改最近的 commit ,但是如果我们想还原这个 commit 。那这个时候,我们又该怎么办呢?我们可以使用 git revert 命令来告诉 Git 还原之前创建的commit,该命令使用的方式如下:

还是以上述例子来进行讲解,比如我们想还原下图中红色框中的 commit :

我们可以使用 git revert b71b40 ,需要注意的是使用该命令,默认会创建一个新的提交。如下图所示:

一般情况下,我们可以使用Git系统默认的 revert 信息。当我们保存并退出后,再使用 git log 命令查看我们的日志提交记录,我们能得到下图:

在上述例子中,我们学会了如何还原一个提交,但是如果我们本是这个提交就是错误的,我们并不想要这个提交,也不想仓库记录中包含 revert 的提交记录。这个时候我们又该怎么办呢?我们可以使用 git reset 命令来告诉 Git 重置 commit 。

重置(reset) 似乎和 还原(revert) 相似,但它们实际上差别很大。还原会创建一个新的 commit,并还原或撤消之前的 commit。但是重置会清除 commit!

git reset 命令相比其他 Git 命令功能要多一点,可以用来:

git reset 并不直接使用 commit 的 SHA ,而是使用特殊的 "祖先引用" 来告诉 Git 将 HEAD 指针移动到哪个commit。我们来看看这些特殊的符号。

我们可以通过以下方式引用之前的 commit:

^ 和 ~ 的区别主要体现在通过合并而创建的 commit 中。合并 commit 具有两个父级。对于合并 commit, ^ 引用用来表示第一个父 commit,而 ^2 表示第二个父 commit。第一个父 commit 是当你运行 git merge 时所处的分支,而第二个父 commit 是被合并的分支。

我们看下面的例子,来一起来理解:

因为 HEAD 指向 b71b405 commmit。

了解了祖先引用,现在我们来了解 git reset 命令的使用:

一般情况下,使用该命令,我们会添加如下选项:

直接理解这些选项比较困难,下面我们将结合图片与实际例子来进行讲解。

在下图中,假如我们的仓库中已经有了如下提交 D、E、F、G、H ,其中 master 指向最近的提交 H , HEAD 指向 master 。

这个时候我们如果使用 git reset --mixed HEAD~1 那么会将 master 与 HEAD 将会指向前一个提交 G 。同时 G 提交会移动到工作目录中。如下图所示:

当 H 提交修改的文件被移动到到工作目录后,文件的状态都为 modifed ,也就是我们需要重新添加到暂存区,然后进行 commit 。我们继续看下面的例子:

在上述仓库中有3个提交,其中 HEAD 指向 bb780f9 上的 master , 这个时候如果我们运行 git reset HEAD~ 命令,会将 commit bb780f9 中的文件移动到工作目录中,如下所示:

调用 git status 来查看我们的仓库状态,我们会发现使用 --mixed 选项,是不会暂存我们的更改的,也就是不会将相应提交的文件放入暂存区中。

当使用 --soft 选项时,不仅会移动 master 与 HEAD 指针,还会将相应修改添加到暂存区中,如下所示:

我们继续查看下面的例子:

最后我们再来看看 --hard 选项:

使用 --hard 将清除对应 commit 所作的更改,继续查看下面的👇的例子:

当使用了 --hard 选项后,发现仓库中对应的提交消失了。

当我们直接使用 git reset 或 git reset HEAD 时,表示清除暂存区中的 commit 。下面我们来看这个例子:

那么如果我们只想将 B.java 文件从暂存区中移除,那我们又该怎么办呢?我们可以使用如下命令:

当然在Git中支持多个文件的取消暂存,具体命令如下:

在上述命令中 <file>... 代表一个或多个文件。

最后还是回到我们熟悉的图形化界面的使用流程中。我们来看看IDEA为我们提供了哪些便利吧。

在创建相应 commmit 时,我们可以勾选下图中的
Amend commit 选项。如下所示:

上述操作与使用 git commit --amend 命令的效果一样。

通过依次点击编译器底部的 Version Control -> Log ,然后选择想要 revert 的 commit ,点击鼠标 右键 ,选择 Revert Commit 就可以啦~

通过依次点击编译器底部的 Version Control -> Log ,然后选择想要 reset 的 commit ,点击鼠标 右键 ,选择 Reset Current Branch to Here.. 就完成第一步啦~

当然在第二步中,我们需要选择 git reset 中的选项,在 IDEA 中提供了四种选项 Soft、Mixed、Hard、Keep ,如下所示:

在上图中,我们不熟悉的只有 --keep 选项,因为该选项在平时中的项目并不常用,所以这里就不做更多介绍了,有兴趣的小伙伴,可以查看官方文档中 git reset 中对其的介绍。

站在巨人的肩膀上,才能看的更远~

热心网友 时间:2023-09-13 15:22

在前面的文章中,我们学习了标签、分支、和合并。现在我们将学习Git中另外的三个命令 git commit --amend , git revert , git reset 。下面简单的介绍中几个命令的功能:

在平时的项目开发中,有时候我们可能提交完相应文件后,才发现漏掉了几个文件没有添加,或者我们 commit 消息并没有书写完整或有错别字。那这个时候我们该整么办呢?或许我们会执行一个新的提交来添加我们遗漏的内容,但是这样一点都不优雅!!在Git中为我们提供了带有 --amend 选项的提交来修改我们 最近 的提交:

这里大家可能还是不是很明白,我们看下面这个简单的例子:

在上述例仓库中我们创建了一个 commit ,该 commit 消息并没有书写完整。这个时候我们想修改它,那么我们就可以使用命令 git commit --amend ,当输入该命令后,我们能得到如下弹窗:

这个时候,我们就可以完善该 commit 信息,然后保存并离开。这里我改成了 删除了多余的语句 ,这时我们再使用 git log 命令,我们会发现我们的 commit 消息已经被更改了。如下所示:

当然在上述例子中,我们只是简单的修改了 commit 信息,并没有修改或添加一些新的文件,如果你修改或添加了新的文件,并想将这些修改的文件添加到最近的 commit 中去的话,那么你可能要经历以下步骤:

在实际的项目中,如果你想修改最近的 commit ,那么你需要使用 git commit --amend 来更新最近的 commit ,而不是创建新的 commit 。

在上述例子中,我们知道了如何修改最近的 commit ,但是如果我们想还原这个 commit 。那这个时候,我们又该怎么办呢?我们可以使用 git revert 命令来告诉 Git 还原之前创建的commit,该命令使用的方式如下:

还是以上述例子来进行讲解,比如我们想还原下图中红色框中的 commit :

我们可以使用 git revert b71b40 ,需要注意的是使用该命令,默认会创建一个新的提交。如下图所示:

一般情况下,我们可以使用Git系统默认的 revert 信息。当我们保存并退出后,再使用 git log 命令查看我们的日志提交记录,我们能得到下图:

在上述例子中,我们学会了如何还原一个提交,但是如果我们本是这个提交就是错误的,我们并不想要这个提交,也不想仓库记录中包含 revert 的提交记录。这个时候我们又该怎么办呢?我们可以使用 git reset 命令来告诉 Git 重置 commit 。

重置(reset) 似乎和 还原(revert) 相似,但它们实际上差别很大。还原会创建一个新的 commit,并还原或撤消之前的 commit。但是重置会清除 commit!

git reset 命令相比其他 Git 命令功能要多一点,可以用来:

git reset 并不直接使用 commit 的 SHA ,而是使用特殊的 "祖先引用" 来告诉 Git 将 HEAD 指针移动到哪个commit。我们来看看这些特殊的符号。

我们可以通过以下方式引用之前的 commit:

^ 和 ~ 的区别主要体现在通过合并而创建的 commit 中。合并 commit 具有两个父级。对于合并 commit, ^ 引用用来表示第一个父 commit,而 ^2 表示第二个父 commit。第一个父 commit 是当你运行 git merge 时所处的分支,而第二个父 commit 是被合并的分支。

我们看下面的例子,来一起来理解:

因为 HEAD 指向 b71b405 commmit。

了解了祖先引用,现在我们来了解 git reset 命令的使用:

一般情况下,使用该命令,我们会添加如下选项:

直接理解这些选项比较困难,下面我们将结合图片与实际例子来进行讲解。

在下图中,假如我们的仓库中已经有了如下提交 D、E、F、G、H ,其中 master 指向最近的提交 H , HEAD 指向 master 。

这个时候我们如果使用 git reset --mixed HEAD~1 那么会将 master 与 HEAD 将会指向前一个提交 G 。同时 G 提交会移动到工作目录中。如下图所示:

当 H 提交修改的文件被移动到到工作目录后,文件的状态都为 modifed ,也就是我们需要重新添加到暂存区,然后进行 commit 。我们继续看下面的例子:

在上述仓库中有3个提交,其中 HEAD 指向 bb780f9 上的 master , 这个时候如果我们运行 git reset HEAD~ 命令,会将 commit bb780f9 中的文件移动到工作目录中,如下所示:

调用 git status 来查看我们的仓库状态,我们会发现使用 --mixed 选项,是不会暂存我们的更改的,也就是不会将相应提交的文件放入暂存区中。

当使用 --soft 选项时,不仅会移动 master 与 HEAD 指针,还会将相应修改添加到暂存区中,如下所示:

我们继续查看下面的例子:

最后我们再来看看 --hard 选项:

使用 --hard 将清除对应 commit 所作的更改,继续查看下面的👇的例子:

当使用了 --hard 选项后,发现仓库中对应的提交消失了。

当我们直接使用 git reset 或 git reset HEAD 时,表示清除暂存区中的 commit 。下面我们来看这个例子:

那么如果我们只想将 B.java 文件从暂存区中移除,那我们又该怎么办呢?我们可以使用如下命令:

当然在Git中支持多个文件的取消暂存,具体命令如下:

在上述命令中 <file>... 代表一个或多个文件。

最后还是回到我们熟悉的图形化界面的使用流程中。我们来看看IDEA为我们提供了哪些便利吧。

在创建相应 commmit 时,我们可以勾选下图中的
Amend commit 选项。如下所示:

上述操作与使用 git commit --amend 命令的效果一样。

通过依次点击编译器底部的 Version Control -> Log ,然后选择想要 revert 的 commit ,点击鼠标 右键 ,选择 Revert Commit 就可以啦~

通过依次点击编译器底部的 Version Control -> Log ,然后选择想要 reset 的 commit ,点击鼠标 右键 ,选择 Reset Current Branch to Here.. 就完成第一步啦~

当然在第二步中,我们需要选择 git reset 中的选项,在 IDEA 中提供了四种选项 Soft、Mixed、Hard、Keep ,如下所示:

在上图中,我们不熟悉的只有 --keep 选项,因为该选项在平时中的项目并不常用,所以这里就不做更多介绍了,有兴趣的小伙伴,可以查看官方文档中 git reset 中对其的介绍。

站在巨人的肩膀上,才能看的更远~
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 如何避免wps卡顿? 属鼠的男人找对象是属什么,属鼠的人和什么属相合 96年鼠的姻缘在哪年 属相相合年份运势提升 2024属鼠找对象属什么最佳 黑客攻击网站能报案吗 黑客攻击报案有用吗 Git使用教程-7.删除文件 Git的下载、安装与配置,详细图文教程 qq飞车怎么销毁聊天记录 如何删除QQ飞车聊天记录 海口哪里有森海和爱科技耳机卖 听说爱科技AKG k24p这款耳机停产了,是真的吗,在哪里可以买得到 爱科技 AKG话筒网上差价很大,有假货吗 锦州哪有卖正版的耳机的??森海塞尔 或者爱科技的 关于 爱科技 AKG k450 武汉哪有(爱科技)AKG专卖店,最好是正品店,森威的耳机也可以~ akg k309 天猫是真的吗 能不能用比涨停值高的价格买? 股票购入时挂比涨停价高可以吗? 股票集合竞价如何挂价容易买入,可以挂高于前天收盘价的价格买入吗,例如昨天涨停价10块,我今天集合竞 北京十大牛商评选如何进行网上投票,怎么投不了呀 “2008原创网络文学评选”优秀网站有哪些? 北京公卿杯怎么样 红豆莲子羹 红豆莲子羹的家常做法大全怎么做好 鹿柴读啥字音的词典啊? 想问win10怎么切换输入法快捷键 牛肉丸营养丰富、嫩滑爽口,是宝宝补充营养的美食,那么牛肉丸怎么做好吃? 神七航天的资料! 什么情况下采取紧急制动 车辆在什么情况下可以使用紧急制动? 紧急制动什么时候用 紧急制动什么时候用什么时候不用 豆腐丝煮多长时间能熟 豆腐丝煮多久时间能熟 温柔委婉拒绝别人表白的句子汇总 如何选择合适的枕头高度 车辆在什么情况下可以使用紧急制动 拒绝表白的句子大全精选45句 五年级下册英语怎么用when造句 有效的拒绝别人告白的短句 【精】 平安信保是个人贷款还是银行贷款 怎样在电脑上申请 第一次委婉拒绝一个人的表白的句子通用六十句 拒绝表白的语句 怎么把酷狗音乐中的歌曲传到mp4? 物流专业是属于文科还是理科