头图

在实际工作开发中非常实用的几个 git 命令

前言:git 在实际开发过程中的重要性对在座的各位来说想必不用我过多赘述,但是对于 git 中千千万万复杂的命令来讲,在实际开发过程中只有小部分是最经常使用的,今天国庆节第一天,由于疫情原因没回家。闲着没事就给大家总结一下在实际工作中我个人最最最最经常使用的命令,并且我会结合我日常工作流程来讲解。

tips:就不过多介绍 git add-commit-push 这三个命令了


一. git stash + git apply/或(pop)

背景:我需要拿着我修改的代码去和后端对接

已知:

  1. 我们目前不在同一个分支
  2. 我们都是从同一个 master 切出去的一个分支,然后各自进行后端代码的开发和前端代码的开发。
  3. 此时 leader 过来找我,说:“小韩啊,你现在需要去测试xxx的接口看看数据返回有没有问题。”
  4. 假如我现在的代码还未提交过一次(也就是从来没有执行 commit -m 这条命令)

这种情况非常好处理,假如后端的分支名称是 “feat/test-git” 并且已经推上去远程仓库了

  1. 这是你修改的文件(实际情况很可能是修改了了多个文件,我这里举例子只修改了一个) ,
    image.png
  2. 执行 git stash -m "备注信息" 命令,将这些修改的文件保存到贮藏区。这个命令会把你修改的代码放到一个独立区域。通过 git stash list 命令可以查看你已保存的个数。
    gitstah1.gif
  3. 紧接着要想办法去后端的那个分支上了,(这里他必须把他的那个分支推送到远程仓库才可以进行后面的操作)执行 git fetch +[分支名],拉取远程分支到本地。
    image.png
  4. 然后执行 git checkout +[分支名] 切换到后端的分支
    image.png
  5. 下一步执行 git stash apply或者git stash pop命令。(该命令的大致功能就是可以把你在贮藏区的代码给应用到当前分支)两者的主要区别在于是否会删除掉贮藏区的这份修改。apply 是不会删除,还会保留贮藏区的记录,而stash pop 是会删除掉贮藏区的这个记录。
    我个人推荐apply,因为给了你反悔的机会。并且假如你想测试的分支不是这个后端的,而是另外一个人的分支,那么你同样可以携带着你这份代码过去,然后 apply
  6. 此时后端的代码就和你的代码合并到一起了,就可以放心的测试啦~

二. git reset

紧接着的这个命令是我开发中用到次数非常的多的,并且是关键时候可以救命滴~

背景: 假设我现在完成了自己分支的开发,现在有一个 commit 已经提交到了远程仓库(也就是执行过 push 命令了)
image.png

看一眼远程仓库,嗯,这个 commit 已经被推过去了。
image.png

but,此时你突然发现了这个 commit 的其中某个文件有一个巨大的错误,需要撤销掉这个 commit 重新提交一个 pr

这时候你可能就需要用到 git reset 命令。其实从名字就可以看出来这个命令是要干什么的。
image.png

  1. 这时候我们执行 git reset --soft HEAD~1
    image.png
  2. 执行完以后,你会发现暂存区突然出现了刚刚我们提交的那个 commit 的修改文件。
    image.png
  3. 这里有个 git 基础知识的关键点需要去理解清楚。我们首先会发现在 Vscode 里会出现一个细小的变化。
    image.png
    这里是提醒我们落后了远程仓库一个修改。
  4. 我们再去看一下 gitHub仓库 ,好奇怪,为什么这个 commit 还在呢?
    image.png
    再执行一下 git log 看看,发现 gitlog 的内容,刚刚我们提交的那个 commit 确实已经消失了,HEAD 指向的 commit 也是上一条。
    image.png
  5. 这里我们需要特别明白,基本上除了 git pull 这个命令,我们操作的都是本地仓库,你是无法直接影响到远程仓库的。你现在只是本地仓库撤销了这个 commit,但是远程仓库还没有更新。所以你接下来需要执行 git push -f 这个命令,推送这次撤销的动作,来更新远程仓库。告诉远程仓库你刚刚的那个 commit 我不要了。(慎用push -f,使用的前提是你很清楚这个命令会造成什么后果)
    image.png
  6. 这时候我们再去 gitHub 看一下,就会发现。10月2号提交的那个 commit 没有了,最新提交记录的也是昨天的。最重要的是我们的代码也都回来了。
    image.png
    接下来你就继续修改你的代码,然后重新提交 pr 即可。

三. git commit --amend

背景:提交的 commit 备注信息有错别字这么办?
别急,git commit --amend 就是解决这个问题滴~

image.png

  1. 写错字,并且还推上去了。
    image.png
    image.png
  2. 执行 git commit --amend会默认修改第一个 commit 记录。
    image.png
  3. 执行完后会跳转到这个页面,这个页面主要是 vim编辑器 打开的样子,不了解 vim 的同学需要自行查阅相关操作。在这里我简单介绍一下在当前页面我们需要用到的命令。
    image.png
  4. 其实你会发现我们的 commit 消息就是第一行文字
    image.png
  5. 这时候按下 i,没错,就是这个键盘上普普通通的 i 键位。(单词意思:insert:插入 的缩写)然后输入你修改的内容即可
    image.png
    image.png

(我是真心害怕你们看不懂,我都这样讲解啦,还舍不得点个赞吗?😭)

  1. 接下来就是保存这次修改操作。在 insert 模式下,先按 esc ,退出插入模式,然后按下英文的冒号 :
    image.png
    image.png
    你会发现光标聚焦到了底部。紧接着输入 wq 然后按下回车。这样就执行了保存退出。(w:wirte to disk 写入磁盘,q:quit 退出)
  2. 我们执行一下 git log 看一下,commit 信息确实被修改了。但是同时也要注意左下角,提醒你远程仓库的这个 commit 信息不对称,同时本地这个修改 commit 记录还未提交上去,提醒你提交。
    image.png
  3. 但是在此之前,我们要注意一个细节变化。这是本地 commit 修改过后的 commit-hash标识
    image.png
    这是我们之前的 commit-hash标识,你会发现其实这个命令是删除了上一次 commit,然后重新生成了一个新的 commit 记录
    image.png
  4. 最后,我们同样需要用到 git push -f 这个命令,来强制把这次修改记录覆盖掉远程仓库的。

    (再次提醒:git push -f 在多人协同开发的时候,一定要慎用)
    image.png
  5. 然后看一下远程仓库。
    image.png

四. git reflog

  1. 这个命令是搭配 git reset 使用的,虽然使用的场景有限,但是还简单讲解一下吧。
  2. git reset --hard 这个命令和 git reset --soft 都是重置代码的意思。但是 git reset --hard 命令不会将你修改的代码返回到你的暂存区,而是真正的删除了你撤销掉的 commit 记录。
  3. 这里我们模拟一下场景,现在这个 commit 我希望撤回到暂存区。在上面我们讲解了 reset --soft HEAD~1 这个命令的使用方法。
    image.png
  4. 我们换 reset --hard HEAD~1 试试。
    image.png
    会发现这个修改真的丢了。
  5. 这时候使用 git reflog ,可以查看我们执行 git 相关的所有操作,找到上一次 commit-hard标识 的信息,复制。
    image.png
  6. 然后执行 git reset --soft [hash-id] 你会发现现在多了一个 还没提交的 commit ,那么它是什么呢?
    image.png
    image.png
  7. 让我们执行一下 git log 看一下
    image.png

回来了回来了,都回来了~

总结

代码可以回来,但是属于你青春的那个TA什么时候才可以回来呢?

50 声望
4 粉丝
0 条评论
推荐阅读
TS 函数重载你还不会?来!我教你
前言: 今天在项目中遇到了后端接口参数类型和接口返回值需要修改的场景,由于这个函数在很多页面都用到了,就导致改完相关 api 函数的时候 TS 疯狂报错,所有的参数和返回值都需要跟着改,一时间头疼。正当我手...

FFF方阅读 235

封面图
从零搭建 Node.js 企业级 Web 服务器(十五):总结与展望
总结截止到本章 “从零搭建 Node.js 企业级 Web 服务器” 主题共计 16 章内容就更新完毕了,回顾第零章曾写道:搭建一个 Node.js 企业级 Web 服务器并非难事,只是必须做好几个关键事项这几件必须做好的关键事项就...

乌柏木60阅读 5.9k评论 16

再也不学AJAX了!(二)使用AJAX ① XMLHttpRequest
「再也不学 AJAX 了」是一个以 AJAX 为主题的系列文章,希望读者通过阅读本系列文章,能够对 AJAX 技术有更加深入的认识和理解,从此能够再也不用专门学习 AJAX。本篇文章为该系列的第二篇,最近更新于 2023 年 1...

libinfs39阅读 6.1k评论 12

封面图
从零搭建 Node.js 企业级 Web 服务器(一):接口与分层
分层规范从本章起,正式进入企业级 Web 服务器核心内容。通常,一块完整的业务逻辑是由视图层、控制层、服务层、模型层共同定义与实现的,如下图:从上至下,抽象层次逐渐加深。从下至上,业务细节逐渐清晰。视图...

乌柏木39阅读 7k评论 6

CSS 绘制一只思否猫
欢迎关注我的公众号:前端侦探练习 CSS 有一个比较有趣的方式,就是发挥想象,绘制各式各样的图案,比如来绘制一只思否猫?思否猫,SegmentFault 思否的吉祥物,是一只独一无二、特立独行、热爱自由的(>^ω^&lt...

XboxYan41阅读 2.8k评论 14

封面图
还在用 JS 做节流吗?CSS 也可以防止按钮重复点击
举个例子:一个保存按钮,为了避免重复提交或者服务器考虑,往往需要对点击行为做一定的限制,比如只允许每300ms提交一次,这时候我想大部分同学都会到网上直接拷贝一段throttle函数,或者直接引用lodash工具库

XboxYan34阅读 2.2k评论 2

封面图
从零搭建 Node.js 企业级 Web 服务器(二):校验
校验就是对输入条件的约束,避免无效的输入引起异常。Web 系统的用户输入主要为编辑与提交各类表单,一方面校验要做在编辑表单字段与提交的时候,另一方面接收表单的接口也要做足校验行为,通过前后端共同控制输...

乌柏木32阅读 6k评论 9

50 声望
4 粉丝
宣传栏