git 的使用过程如下:
![0ebfa59b2d03ea0e1bbac6e6a16c4849.png](https://i-blog.csdnimg.cn/blog_migrate/ac4c0e713345cb48716b20e87cf733be.jpeg)
无论开发还是运维,git命令的掌握都是不可缺少的,但是呢,GIt命令非常多,有的命令的使用还是不太好理解,时间长了还会忘记,哎....
所以我们一直想着,有没有类似git知识的动画,一看就懂,看过了还不能忘,直到我在网站里看到了一篇小姐姐写的一篇<< CS Visualized: Useful Git Commands>>文档,用动画介绍了Merge Rebase、Reset、Revert、Cherry-Pick、Fetch、Pull、Reflog等命令的执行过程。
git merge
1、Fast-forward 模式
![f6a10187371f97d600183f4b0291b8e9.gif](https://i-blog.csdnimg.cn/blog_migrate/0f0a8e5e4e4304eefac59ebc63feab0d.gif)
2、No-fast-foward 模式
![7243782ac51b26f595d5a2b0f132d56c.gif](https://i-blog.csdnimg.cn/blog_migrate/4801628b3c5b41caadc2104864dbc6c3.gif)
合并冲突
![51d4b923f3ae5e328d1966e01e78e4c5.png](https://i-blog.csdnimg.cn/blog_migrate/a42a5009e6b743039f6b134e1aa896ad.jpeg)
![6b3eea02fbb7357fcd1bb9d1b2a4a91f.gif](https://i-blog.csdnimg.cn/blog_migrate/4faf47040e2208e2f046dc99b40b112d.gif)
git rebase
![26ff2ec555b562677be78a21bfe5b55d.gif](https://i-blog.csdnimg.cn/blog_migrate/8dcd16b3f23c665c9596c993ba7aa7fa.gif)
我们可以对基于基准的提交执行6个操作:
- reword:更改提交消息
- edit:修改此提交
- squash:将提交合并到上一个提交中
- fixup:将提交合并到先前的提交中,而不保留提交的日志消息
- exec:对要重新设置基准的每个提交运行命令
- drop:删除提交
如果我想删除一个提交:
![96782d14865cb674cdfe69e95c3e66b5.gif](https://i-blog.csdnimg.cn/blog_migrate/ad15259cde7896d156a25082c1aa4ee2.gif)
或者压缩多个提交
![586e8cca9b7f7ce8a6c0fff8bea3d21a.gif](https://i-blog.csdnimg.cn/blog_migrate/199bf5e4a863c8dc4864cb6a8792935c.gif)
git reset
1、Soft reset
一个软复位移动HEAD到指定的提交(或相对于提交的指数HEAD),没有摆脱被引入于事后提交的变化!
![75e1c10f1e3b51a5a214cbe83025c220.gif](https://i-blog.csdnimg.cn/blog_migrate/20d1267c7ed03bdf95a2668fec5d31bc.gif)
2、Hard reset
有时,我们不想保留某些提交所引入的更改。与软重置不同,我们不再需要访问它们。Git应该简单地将其状态重置为指定提交时的状态:这甚至包括工作目录和暂存文件中的更改!
![b03cf1f77e85992f2b620fd1add4dc0f.gif](https://i-blog.csdnimg.cn/blog_migrate/df6d5b2df0e80dccfebbf80a30f9bf35.gif)
revert
取消更改的另一种方法是执行git revert。通过还原某个提交,我们创建一个包含还原更改的新提交!
![ede482212d09893ea406f73352bea2cc.gif](https://i-blog.csdnimg.cn/blog_migrate/1238c1ce1118a82caf9a21c01463e183.gif)
cherry-pick
当某个分支包含一个引入了我们活动分支所需的更改的提交时,我们可以执行cherry-pick该命令!通过cherry-pick提交,我们在活动分支上创建了一个新的提交,其中包含cherry-picked提交所引入的更改。
![4afa14aaace4e9e7f7a0811c0c523999.gif](https://i-blog.csdnimg.cn/blog_migrate/efa0bd4a7c53a085301efa943cb2beec.gif)
fetch
如果我们有一个远程Git分支,例如Github上的一个分支,则可能发生该远程分支具有当前分支所没有的提交!也许另一个分支被合并了,您的同事提出了快速解决方案,依此类推。
![c821d2d1cb1c9268eb574b858424b8fb.gif](https://i-blog.csdnimg.cn/blog_migrate/0d090cda7435d76b67d38eb613fd1e68.gif)
pull
尽管git fetch对于获取分支的远程信息非常有用,但是我们也可以执行a git pull。A git pull实际上是两个命令合二为一:git fetch和git merge。当我们从原点提取更改时,我们首先要像使用一样获取所有数据git fetch,之后最新的更改会自动合并到本地分支中。
![1b95c2948aa5bc2d61f33c63f558e622.gif](https://i-blog.csdnimg.cn/blog_migrate/8468f887024023fd95f2347ed930ab7e.gif)
reflog
![1d1f2d75192b3e7bf35bbf2d51f30e1d.gif](https://i-blog.csdnimg.cn/blog_migrate/6b852d91c0b56d8aa9a5f893d49147d3.gif)
如果您输入有误,可以HEAD根据reflog提供给我们的信息进行重置,轻松地重做!
假设我们实际上不想合并origin分支。当执行git reflog命令时,我们看到合并之前仓库的状态为HEAD@{1}。让我们执行一次git reset将HEAD指向它所在的位置HEAD@{1}!
![215362e4f12fbca6b2baffeb26953b8e.gif](https://i-blog.csdnimg.cn/blog_migrate/eddb385a8590a6f45501c8ccfd26ec69.gif)
最后,送一份福利,git命令大全:
![ed01c3c07018dd5c6e150b15f97f7664.png](https://i-blog.csdnimg.cn/blog_migrate/2925afdfefca9b767a2fd0add204cffa.jpeg)