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章的使用相关内容就差不多了
git理解和使用
最新推荐文章于 2023-02-11 00:16:09 发布