绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
Git实用指南完结篇
2020-05-19 15:18:34

Git是什么?代码管理工具。Git是怎么实现的?我们不需要关心。我们只要把目光盯着每个commit,知道git的每个命令都是为此服务的,足矣。

正如我在模型里形容的,git的每个分支都可以理解为一根竹子,而每个commit就是竹子的一节,这就是我们需要的全部信息。merge、rebase、cherry-pick就是维护和改造commit的三把利器。

merge就是从两根竹子的根部,一节节向上对比它们的不同,当有不同发生时,有两条路走就两条路都保留,并用一个新的节点糅合起来,只有一条路就直接走过去,当然两条路可能有冲突,解决一下就好了。

rebase也同样是从两根竹子的根部出发,只不过当遇到不同时,就把你的这条路多出的部分剪掉,先把别人的放进来,再一节一节安回去,因为每一节都重新安,所以commitId都会变,而且每一节都有可能产生冲突,理论上糟糕的情况是有多少节竹子要安,就得解决多少次冲突。所以务必勤快些,随时随地git pull --rebase

cherry-pick就简单了,不需要从竹子根部出发,只取需要的commit就行,它像是rebase的后半段,也有可能产生一堆冲突。。

除了merge的Non Fast Forward(非快进式合并),其他的所有方式都会丢失操作记录,所以一定要牢记自己的关注点是操作记录还是整洁。

还有一个概念需要了解一下,HEAD和FETCH_HEAD。HEAD就是头节点,是一个指针,也就是始终指向竹子上一节。FETCH_HEAD是当你执行 git fetch 时,拉取下来的代码的头结点。

只要真的把每个分支都想象成一根竹子,记得我上边说的区别,把自己当成git,你在操作git时就能游刃有余,遇到的大多数问题都有把握搞定,而不至于被git整的焦头烂额。大多数人遇到问题往往就是因为对git的理念不熟悉,不了解每条命令的目的造成的。包括之前的我也是,经常忙碌到后,发现自己渴求的不过是回到开始的状态,好给自己一次重新来过的机会。。

以下是我在平时会使用到的一些命令的总结,希望能够对大家有所帮助。

后演示一下 git rebase -i 和 git reflog 的作用。输入 git rebase -i HEAD~ 会打开以下页面:

在选中范围内的commit会依次列出,前面有一个 pick 单词,替换这个单词为提示中的某一个就可以进行变更。例如改为 r 或者 reword,表示只修改commit message,保存之后git会再次弹出一个框,就可以修改对应的commit message了。

git reflog记录的是你的操作记录,而不是commit记录,这点一定要分清。以下就是一个示例:

这时候,你想回到哪一步,直接 git reset --hard [commitId] 就可以了,这是git为你提供的一份超级后悔药,请合理食用哦。

本文的分享到此就结束了,git还有很多五彩斑斓的命令,但是本文目的不在于把git的每个命令都介绍给你,遇到特定问题查一下资料就可以做到。我们是希望你能够理解git的主要目的,时刻谨记自己在操作哪根竹子,关注哪个竹节,不要陷于无穷无尽的命令中无法自拔,让git成为提高工作效率的利器,而不是你前进道路上的绊脚石。git的好处,使用越久就会越有体会,希望git能够陪伴你成长,记录你进步的旅途。


分享好友

分享这个小栈给你的朋友们,一起进步吧。

飞机酱的IT之旅
创建时间:2020-04-28 18:20:39
飞机酱是一个Android开发攻城狮,除了要攻陷Android外,还会进攻数据结构、算法、网络、计算机系统等方面的知识。关注我,一起学IT吧。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 大大纸飞机
    栈主

小栈成员

查看更多
  • ?
  • 小雨滴
  • 人工智能频道
  • 栈栈
戳我,来吐槽~