git使用中可以忽略但是又必须知道的指令

本文介绍了Git在不同场景下的实用指令,如使用git stash暂存未完成的修改,用git reset撤销提交,找回误删文件,以及如何在暂存区撤销文件。还讲解了如何通过git reflog回退到特定版本,并处理push时的冲突问题,以及更新Git子模块的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

区域介绍

当从远程服务器上下载项目之后,在git 使用过程中关于文件的区域可以划分为下面的几个区:
disk 硬盘区(当前的工作目录)
暂存区(git add 之后文件就会被放在暂存区)
本地仓库(git commit之后文件会被放在本地仓库)
远程仓库(git push之后文件会被放在远程仓库)

场景一

编写了一个函数但是却没有写完,别人让修改一个紧急bug,修改完bug需要提交代码,要是注释掉自己写到一半的代码,再提交就造成了代码管理上的不合适,要是删除,那刚才写到一半的函数是不是就白写了(当前修改的文件与bug不在同一个文件)。
针对以上场景一这里有一个方法,git可以解决上述这种情况。

git指令

可以先将自己本地所做的修改使用git stash暂存下来,然后使用git pull来拉取最新的代码,拉取最新的代码之后,接着修改自己的bug,修改完bug,就是提交自己更改的bug了,具体的指令如下:
使用指令:

git stash   #先暂存当先的修改
git pull    #更新最新的代码

更新完最新的代码后,修改bug,然后将改动的bug所在的文件添加到暂存区,使用指令:

git  add  文件名                   #添加文件到暂存区
git commit  -m "描述"              #提到到本地仓库中
git push origin 本地仓库名         #推到远程仓库中

场景二

在本地编辑文件的时候,不小心删除了自己当前分支下的某个文件或者文件夹。
使用下面的git指令来找回:
先执行下面的指令:

git pull 

就可以将删除的文件找回来。

场景三

文件修改了之后,发现自己不应该改,这时想要回到自己未修改之前的文件。

git指令

可以执行下面的指令:

git checkout  文件名或者含有文件名的绝对路径(一般都是文件的绝对路径)

这样文件就可以放弃自己的修改,回到没有修改之前的样子了。

场景四

本地所做的修改添加到暂存区,也执行了commit,发现提错了,想撤回。

git指令

git reset --mixed HEAD~1 或者git reset --mixed HEAD^ #表示撤销这次提交,但是工作区之前的修改不会被删除,仅撤销git add添加到暂存区的修改

reset的三种模式:

--soft:不删除工作空间改动代码,撤销commit,不撤销git add .操作,重置位置的同时,保留working Tree工作目录和index暂存区的内容,只让repository中的内容和 reset 目标节点保持一致,因此原节点和reset节点之间的【差异变更集】会放入index暂存区中(Staged files)。所以效果看起来就是工作目录的内容不变,暂存区原有的内容也不变,只是原节点和Reset节点之间的所有差异都会放到暂存区中。
--mixed(默认):不删除工作空间改动代码,撤销commit,并且撤销git add . 操作,重置位置的同时,只保留Working Tree工作目录的內容,但会将 Index暂存区 和 Repository 中的內容更改和reset目标节点一致,因此原节点和Reset节点之间的【差异变更集】会放入Working Tree工作目录中。所以效果看起来就是原节点和Reset节点之间的所有差异都会放到工作目录中。
--hard:删除工作空间改动代码,撤销commit,撤销git add . 操作,重置位置的同时,直接将 working Tree工作目录、 index 暂存区及 repository 都重置成目标Reset节点的內容,所以效果看起来等同于清空暂存区和工作区。

注意完成这个操作后,就恢复到了指定版本的commit状态。

场景五

暂存区添加了多个文件之后,想从暂存区撤销这些文件,即git add之后,想将加入暂存区的文件撤销。

git 指令

执行下面的指令。

git add -i

git status查看文件的状态,发现自己已经加入到暂存区的文件,自己想撤销,这时需要执行git add -i,会出现下面这样一个界面。页面中展示了文件的状态,已经路径,还有每一行前面的数字,我暂且将它认为是文件的编号(1~12),还有指令列表。最后会出现what now>,这时我们需要输入自己要执行的指令,当前我想撤销自己在暂存区的提交,对应指令列表中的3.revert,在what now> 后输入3回车,接下来在出现的what now>后面输入你想撤销的文件对应的编号,回车,文件这行前就会出现*号,撤销多个就执行多次输入编号,回车操作,将需要撤销的文件编号都输入完之后,再次回车,会回到最初的界面,这是选择7.quit,输入7回车便可以退出到命令行了。
在这里插入图片描述
备用撤销暂存区的文件的截图。
在这里插入图片描述
使用git status查看工作目录下文件的状态,就会显示文件已被撤回到硬盘。

示例

场景七

使用git撤销之前加到暂存区的文件的时候(即commit之后,想撤销到没有add之前,但要保留之前在工作区disk硬盘区所做的修改),回退代码,回退的多了。

git指令

git reflog #查看提交日志,重点关注commitId
git reset -commitid #回退代码到指定版本

示例

下面的例子中我查看了当前分支下自己的提交记录。使用指令git log,然后回车。
在这里插入图片描述
第一条日志中,chore(SegmentWgt):左侧列表添加分支位置列表,是我刚提交到本地仓库的,现在我想将它从本地仓库撤销,同时保留我在硬盘上所做的修改,即我的工作目录下所做的修改必须保留。可以使用指令:
git reset commitId #这里的commitId是上图中我第二条日志的id,因为第一条是我想撤销的,当前只能回退到提交前的那个commitId,即下图中所示。
在这里插入图片描述
这里默认采用的是–mixed参数,即可以撤销暂存区,同时也可以撤销本地仓库的文件
执行之后本地目录下执行git status,可以查看当前的工作目录下的文件状态。可以看到之前修改的文件被保存了下来,且文件现在处于未跟踪状态,即暂存区文件也撤销了,当前的修改只存在于硬盘,也就是当前的工作目录。
接下来若是想修改代码,修改完代码之后,就可以进行自己的提交的那一套流程了。
在这里插入图片描述
在这里插入图片描述
但是git push的时候会出现上图所示的错误,这时候需要强制推送,加上-f就可以推送成功。

记录撤销提交到自己的远程分支的代码

在这里插入图片描述
在这里插入图片描述

git checkout 文件可以撤销在disk区的更改。新版的git将git restore与git checkout 分开了,新版git也可以使用git restore 文件。
把文件从暂存区撤销,也就是说执行了git add 。 b站说使用git reset 文件,或者使用git restore --staged 文件,不会对disk上的代码造成修改,会保留之前对工作区代码的修改,只是将文件从暂存区移出。若是想撤销disk,即工作区对代码的修改,同时也想从暂存区撤销,可以使用git checkout HEAD 文件。这个指令不会保留之前工作区的修改。
若是执行了commit将代码提交到本地仓库,想单纯的撤销commit可以使用指令git reset --soft HEAD~1,若是想撤销commit的同时将暂存区的文件也撤销,可以使用git reset HEAD~1,或者使用git reset HEAD^,两者是等价的,或者使用git reset --mixed HEAD~1,默认就是–mixed。若是想将disk,暂存区,本地仓库都撤销,可以使用git reset --hard HEAD~1,会将工作目录中的代码返回到没修改前从远端拉下来时的样子,不保留本地修改。
若是代码已经提交到远程分支,即执行了push操作,这时若是自己的个人 远程分支,[git reset --soft 版本id,修改完之后重新提交,push的时候需要加-f,会保留本地原来所做的修改]可以使用git rest --hard HEAD~1,然后使用git push -f来强制推送。这里不清楚时必须使用–hard吗,还是可以使用–mixed的,另外要是推到了共有分支,只能使用git revert HEAD,然后使用git push推送。

使用git更新子模块

git submodule update:

更新子模块的内容,这会使用父项目中的提交ID更新子模块,而不会下载跟踪的远程仓库中的最新提交。

git submodule update --remote:

更新子模块的内容,这会从跟踪的远程仓库中下载最新提交,而不仅仅是使用父项目中的提交ID更新子模块。

场景八

往远程仓库推送的时候发现没有网

当执行完一套提交指令:

git add .
git commit -m "xxxxx"
git push origin 你的当前分支名

发现在执行第三条指令git push origin 你的当前分支名时,显示无法提交,可能是网络连接问题,或者远程仓库被删除。这时当你发现ubuntu界面上没有显示连网图标。则之前提交的内容不能被提交上去。此时,需要连网之后,再次执行第三条语句。

git push origin 你的当前分支名

场景九

提交代码的时候,提交信息编写错误

即git commit -m "xxxxxx"的时候,描述编写错误了,这时可以使用git commit --amend指令回车。
出现下面的界面:
在这里插入图片描述
进入后在之前的描述中直接修改描述文本,编辑完成之后,点击ctrl + o按键,写入文件,然后点击enter按键确认文件名,再点击ctrl + x 退出这个编辑器。
在终端输入git log可以看到自己已经修改了提交的描述信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肩上风骋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值