持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击
前言:git 在实际开发过程中的重要性对在座的各位来说想必不用我过多赘述,但是对于 git 中千千万万复杂的命令来讲,在实际开发过程中只有小部分是最经常使用的,今天国庆节第一天,由于疫情原因没回家。闲着没事就给大家总结一下在实际工作中我个人最最最最经常使用的命令,并且我会结合我日常工作流程来讲解。
tips:就不过多介绍 git add-commit-push 这三个命令了
一. git stash + git apply/或(pop)
背景:我需要拿着我修改的代码去和后端对接
已知:
-
我们目前不在同一个分支
-
我们都是从同一个 master 切出去的一个分支,然后各自进行后端代码的开发和前端代码的开发。
-
此时 leader 过来找我,说:“小韩啊,你现在需要去测试xxx的接口看看数据返回有没有问题。”
-
假如我现在的代码还未提交过一次(也就是从来没有执行
commit -m这条命令)
这种情况非常好处理,假如后端的分支名称是 “feat/test-git” 并且已经推上去远程仓库了
-
这是你修改的文件(实际情况很可能是修改了了多个文件,我这里举例子只修改了一个) ,
-
执行
git stash -m "备注信息"命令,将这些修改的文件保存到贮藏区。这个命令会把你修改的代码放到一个独立区域。通过git stash list命令可以查看你已保存的个数。 -
紧接着要想办法去后端的那个分支上了,(这里他必须把他的那个分支推送到远程仓库才可以进行后面的操作)执行
git fetch +[分支名],拉取远程分支到本地。 -
然后执行
git checkout +[分支名]切换到后端的分支 -
下一步执行
git stash apply或者git stash pop命令。(该命令的大致功能就是可以把你在贮藏区的代码给应用到当前分支)两者的主要区别在于是否会删除掉贮藏区的这份修改。apply是不会删除,还会保留贮藏区的记录,而stash pop是会删除掉贮藏区的这个记录。 我个人推荐apply,因为给了你反悔的机会。并且假如你想测试的分支不是这个后端的,而是另外一个人的分支,那么你同样可以携带着你这份代码过去,然后 apply。 -
此时后端的代码就和你的代码合并到一起了,就可以放心的测试啦~
二. git reset
紧接着的这个命令是我开发中用到次数非常的多的,并且是关键时候可以救命滴~
背景: 假设我现在完成了自己分支的开发,现在有一个 commit 已经提交到了远程仓库(也就是执行过 push 命令了)
看一眼远程仓库,嗯,这个 commit 已经被推过去了。
but,此时你突然发现了这个 commit 的其中某个文件有一个巨大的错误,需要撤销掉这个 commit 重新提交一个 pr。
这时候你可能就需要用到 git reset 命令。其实从名字就可以看出来这个命令是要干什么的。
-
这时候我们执行
git reset --soft HEAD~1 -
执行完以后,你会发现暂存区突然出现了刚刚我们提交的那个 commit 的修改文件。
-
这里有个 git 基础知识的关键点需要去理解清楚。我们首先会发现在 Vscode 里会出现一个细小的变化。
这里是提醒我们落后了远程仓库一个修改。
-
我们再去看一下 gitHub仓库 ,好奇怪,为什么这个 commit 还在呢?
再执行一下
git log看看,发现 gitlog 的内容,刚刚我们提交的那个 commit 确实已经消失了,HEAD 指向的 commit 也是上一条。 -
这里我们需要特别明白,基本上除了
git pull这个命令,我们操作的都是本地仓库,你是无法直接影响到远程仓库的。你现在只是本地仓库撤销了这个 commit,但是远程仓库还没有更新。所以你接下来需要执行git push -f这个命令,推送这次撤销的动作,来更新远程仓库。告诉远程仓库你刚刚的那个 commit 我不要了。(慎用push -f,使用的前提是你很清楚这个命令会造成什么后果) -
这时候我们再去 gitHub 看一下,就会发现。10月2号提交的那个 commit 没有了,最新提交记录的也是昨天的。最重要的是我们的代码也都回来了。
接下来你就继续修改你的代码,然后重新提交 pr 即可。
三. git commit --amend
背景:提交的 commit 备注信息有错别字这么办?
别急,git commit --amend 就是解决这个问题滴~
-
写错字,并且还推上去了。
-
执行
git commit --amend会默认修改第一个commit记录。 -
执行完后会跳转到这个页面,这个页面主要是 vim编辑器 打开的样子,不了解 vim 的同学需要自行查阅相关操作。在这里我简单介绍一下在当前页面我们需要用到的命令。
-
其实你会发现我们的 commit 消息就是第一行文字
-
这时候按下
i,没错,就是这个键盘上普普通通的i键位。(单词意思:insert:插入 的缩写)然后输入你修改的内容即可
(我是真心害怕你们看不懂,我都这样讲解啦,还舍不得点个赞吗?😭)
-
接下来就是保存这次修改操作。在 insert 模式下,先按
esc,退出插入模式,然后按下英文的冒号:你会发现光标聚焦到了底部。紧接着输入
wq然后按下回车。这样就执行了保存退出。(w:wirte to disk 写入磁盘,q:quit 退出) -
我们执行一下
git log看一下,commit 信息确实被修改了。但是同时也要注意左下角,提醒你远程仓库的这个commit信息不对称,同时本地这个修改 commit 记录还未提交上去,提醒你提交。 -
但是在此之前,我们要注意一个细节变化。这是本地 commit 修改过后的 commit-hash标识
这是我们之前的 commit-hash标识,你会发现其实这个命令是删除了上一次 commit,然后重新生成了一个新的 commit 记录
-
最后,我们同样需要用到
git push -f这个命令,来强制把这次修改记录覆盖掉远程仓库的。
(再次提醒:git push -f 在多人协同开发的时候,一定要慎用) -
然后看一下远程仓库。
四. git reflog
-
这个命令是搭配
git reset使用的,虽然使用的场景有限,但是还简单讲解一下吧。 -
git reset --hard这个命令和git reset --soft都是重置代码的意思。但是git reset --hard命令不会将你修改的代码返回到你的暂存区,而是真正的删除了你撤销掉的 commit 记录。 -
这里我们模拟一下场景,现在这个 commit 我希望撤回到暂存区。在上面我们讲解了
reset --soft HEAD~1这个命令的使用方法。 -
我们换
reset --hard HEAD~1试试。会发现这个修改真的丢了。
-
这时候使用
git reflog,可以查看我们执行 git 相关的所有操作,找到上一次commit-hard标识的信息,复制。 -
然后执行
git reset --soft [hash-id]你会发现现在多了一个 还没提交的 commit ,那么它是什么呢? -
让我们执行一下
git log看一下
回来了回来了,都回来了~
总结
代码可以回来,但是属于你青春的那个TA什么时候才可以回来呢?