无论是开发、运维,还是测试,大家都知道Git在日常工作中的地位。所以,也是大家的必学、必备技能之一。之前公众号也发过很多git相关的文章:
Git这些高级用法,喜欢就拿去用!
一文速查Git常用命令,搞定版本控制照做就ok
大牛总结的Git使用技巧,写得太好了!
掌握这10条规范,轻松搞定Git!
但是呢,民工哥,也经常在后台看到读者说,命令太多了不好记啊,时间长了不用又忘记了等等的吐槽。是啊,要学一门技术真难,何况现在技术更新、迭代这么快.....
所以,对于学习Git这门技术,要是有一个一看就懂,一学就会的入门资料就好了。前不久,国外的一位小姐姐写了一篇这样的文章《CS Visualized: Useful Git Commands》。作者是来自英属哥伦比亚的小姐姐 Lydia Hallie,在这篇文章里面,她通过生动形象的动画,以更加直观的方式,向开发者展示 Git 命令中的 merge、rebase、reset、revert、cherry-pick 等常用骚操作的具体原理。
下面就给大家带来一些实例分享:
1、git merge
fast-forward模式
![79c6008b3688280effa5d29586d2bfed.gif](https://i-blog.csdnimg.cn/blog_migrate/460506d58184f07429f54136f013a9f5.gif)
no-fast-forward模式
![426964389775285ff5188cf5d7bb4296.gif](https://i-blog.csdnimg.cn/blog_migrate/9bf19012246947a1c70936491e1bbaee.gif)
合并冲突修复的过程 ,动画演示如下:
![0b3b62a4b59e112b66930cd29d687afa.gif](https://i-blog.csdnimg.cn/blog_migrate/c8a7f36d19d4aa0977bed015d70c0216.gif)
2、git rebase
git rebase 指令会复制当前分支的所有最新提交,然后将这些提交添加到指定分支提交记录之上。
![2f773e458ed9e3f7afad7f5861286440.gif](https://i-blog.csdnimg.cn/blog_migrate/43f25487d040706e9d37a9df76bc5eb0.gif)
git rebase还提供了 6 种操作模式:
- reword:修改提交信息
- edit:修改此提交
- squash:将当前提交合并到之前的提交中
- fixup:将当前提交合并到之前的提交中,不保留提交日志消息
- exec:在每一个需要变基的提交上执行一条命令
- drop:删除提交
以 drop 为例:
![6f1e08e6f94984cc614404a40f280f52.gif](https://i-blog.csdnimg.cn/blog_migrate/cbd6a87459fff091c9c0413079a42688.gif)
以 squash 为例:
![83ef871ffd9d846d3d5e8e91ecdad95c.png](https://i-blog.csdnimg.cn/blog_migrate/264c295678343157d1cecf115712842a.png)
3、git reset
以下图为例:9e78i 提交添加了 style.css 文件,035cc 提交添加了 index.js 文件。使用软重置,我们可以撤销提交记录,但是保留新建的 style.css 和 index.js 文件。
![133b1928cf69792f1ce336270ed2819b.png](https://i-blog.csdnimg.cn/blog_migrate/9fe3cc8b9251855212d88cdbbbc22b60.png)
Hard reset硬重置
硬重置时:无需保留提交已有的修改,直接将当前分支的状态恢复到某个特定提交下。需要注意的是,硬重置还会将当前工作目录(working directory)中的文件、已暂存文件(staged files)全部移除!如下图所示:
![d17b4639895a0f5b5bf7f8321c3b189b.gif](https://i-blog.csdnimg.cn/blog_migrate/18f7374589f8e8690050cbfcce5666a1.gif)
4、git revert
举个例子,我们在 ec5be 上添加了 index.js 文件。之后发现并不需要这个文件。那么就可以使用 git revert ec5be 指令还原之前的更改。如下图所示:
![87bdcaa6325afb33d834d2ca64ccbb26.png](https://i-blog.csdnimg.cn/blog_migrate/c6f400bea611366faf27e676d0fc5346.png)
5、git cherry-pick
举个例子:dev 分支上的 76d12 提交添加了 index.js 文件,我们需要将本次提交更改加入到 master 分支,那么就可以使用 git cherry-pick 76d12 单独检出这条记录修改。如下图所示:
![fa0d4575aa2d3c96116c0295d1026efb.png](https://i-blog.csdnimg.cn/blog_migrate/f752f8066474b4205edf3c6c656a99d2.png)
6、git fetch
使用 git fetch 指令将远程分支上的最新的修改下载下来。
![c7cf111c01cc59a5432c5e8cba3f7cff.gif](https://i-blog.csdnimg.cn/blog_migrate/445f5ec912136da4963268f9a28d9bb1.gif)
7、git pull
git pull 指令实际做了两件事:git fetch 和 git merge。
如下图所示:
![b36d405b2d910fde4d31eecbe312523e.gif](https://i-blog.csdnimg.cn/blog_migrate/a700eba16238ff391b3d8754a4550103.gif)
8、git reflog
git reflog 用于显示所有已执行操作的日志!包括合并、重置、还原,也就是记录了对分支的一切更改行为。
![63b3e099f3511b6a87637a60c19e03eb.png](https://i-blog.csdnimg.cn/blog_migrate/9209712319ba372cd6f7661944d249e2.png)
如果,你不想合并 origin/master 分支了。就需要执行 git reflog 命令,合并之前的仓库状态位于 HEAD@{1} 这个地方,所以我们使用 git reset 指令将 HEAD 头指向 HEAD@{1}就可以了。
![8c4476cea972ff83771e3c648778b1d0.gif](https://i-blog.csdnimg.cn/blog_migrate/016665d3975301a4a1003a4ed7adba82.gif)
以上就是民工哥今天给大家带来的分享,如果本文对你有所帮助,请点个在看与转发分享支持一下,感谢大家。我们一起学习,共同进步!!!
原作者:莉迪亚·哈莉(Lydia Hallie) 原文:https://dev.to/lydiahallie/cs-visualized-useful-git-commands-37p1 民工哥通过翻译作者原文再加上一些个人理解总结而成,版权归原作者所有,纯属技术分享,不作为商业目的。
![f43342e6d3b6fc47199d61984227dff1.png](https://i-blog.csdnimg.cn/blog_migrate/2dd5a0bcc6e8c982ff7cacd7d7c2bf92.png)
民工哥技术之路推荐搜索
运维进阶之路
目录
MySQL
Nginx