git理解和使用

来源:互联网 发布:网络变压器内部结构 编辑:程序博客网 时间:2024/04/20 21:03
  • git是分布式管理的
    没有代码服务器的概念, 不应该提”服务器的代码”,而应该理解为remote(远端/远程)。
    所有分支的地位是一样的: pull后,你本地拥有的信息就和远端一样了。
    提交是一个个的点,把分支理解成是串起这个分支需要的点的线。

  • 相关联的3个分支
    假设本地的是dev/lwl
    远程的是origin/dev/lwl
    git为了好比较本地和远程分支的差异情况,还在本地建了个remote-tracking分支,这样你本地提交了2次的时候(超前),会看到下面的提示:
    On branch dev/lwl
    Your branch is ahead of ‘origin/dev/lwl’ by 2 commits.
    落后的话是这样的提示:
    Your branch is behind ‘origin/master’ by 26 commits, and can be fast-forwarded.

  • merge
    好处是可以看到各个分支的演化线路
    坏处是因为有不少分叉(不少直线),导致有时需要定位bug用到二分查找时不方便

  • rebase
    如果团队了好几个人在各自分支开发,要做到各个分支都是一条直线,需要协调一致用rebase。
    可以这么理解rebase(replay base on):在dev/lwl上执行git rebase master 意思是: replay dev/lwl上的改动 base on master。然后 master还需要merge一下(会直接fast forward)。
    用rebase只要避免一点: Do not rebase commits that exist outside your repository.(否则会导致2个内容相同而sha-1不同的commit, 参看https://git-scm.com/book/en/v2/Git-Branching-Rebasing 图Figure 3-39)
    在dev/lwl上的一个commit如果push到origin/dev/lwl了,也算是exist outside your repository了,此时就不应该用rebase了。一旦不小心用了,合并dev/lwl和origin/dev/lwl时就应该用pull - -rebase(最后虽然代码能跑,但还是导致了内容相同sha不同的commit)

  • cherry-pick
    如果master分支只需要dev/lwl上的某个,或某几个提交(commit), 可以用cherry-pick. 当我查cherry的意思时,惊奇地看到”乳房、草莓”, 遂想起linux说的这句话”软件就像性一样, 不要钱的时候更好”, 只有说得出这种话的人才会选cherry这个词哈。
    我们姑且将cherry-pick翻译成摘草莓吧,commit就是一个个的草莓。cherry-pick某个dev/lwl上的commit相当于将master这条线把这个commit串起来。当然也可以把连续的几个commit pick过来,但是中间不能有merge的commit,因为merge的commit是不能cherry-pick的。

  • 推荐资料
    https://git-scm.com/book/en/v2
    这个讲git讲的挺好,看前3章的使用相关内容就差不多了

0 0
原创粉丝点击