聊聊git那些事儿(二)

187 阅读3分钟

续接上文聊聊git那些事(一)

协同开发

在我们与队友、伙伴一同进行开发的时候,我们也依旧会遇到很多的问题,协同工作中的复杂性和沟通不足。如合并冲突、分支管理混乱等等。
场景一

我早上十二点起床开始coding,在我不知情的情况下,此时小芳已完成了一阶段的开发并且推送到仓库了,五分钟后我觉得可以吃个午餐再来,于是乎我把刚写的const 准备提交。

image.png 我用我学了两年半的英语尝试着理解:它说我仓库包含我本地没有的work,这可能是另外一个提交导致的。

于是我知道了,它提示我git pull一下,将仓库的代码拉取过来,再进行提交。
场景二

当我吃完饭回来,又写了五分钟代码,完成了一个函数,困了,于是乎我告诉自己休息会精力充沛,我又开始提交代码,但是呢,又报错,我意识到了小芳离我越来越远,我沉重地又一次将代码pull回来,于是震惊的一幕出现了,git给我传入了一个更改,我觉得小芳在走向我,小芳已经帮我完成了那个函数。

当你和搭档一起开发时,当你上传时,如果同时更改了一个文件,git会提示你需要pull回来仓库的文件,是要保留你的,或保留仓库内的,亦或是都保留,并且会高亮提醒你文件的差异在哪。

GIT分支

什么是 Git 分支?

Git 分支在本质上是一条独立的开发线。在处理新功能或 bug 修复时,你可以使用分支来将你的工作与其他团队成员的工作隔离开来。也就是在主分支的基础上,再生长出一条枝芽 (创建分支),当这颗枝芽生长(开发)完毕,他就真正属于主干(主分支),可以合并(merge),但实际上呢 当我们项目开发时,每一次的提交,master分支就会向前移动一步,master分支线也就越来越长,如果我们用命令行创建一个新的分支dev(git branch dev),此时呢git在你本地创建了一个分支dev,也是一个新的指针dev,指向master相同的提交,再把你当前的HEAD指向dev(git checkout dev),当你开发完成一个功能或者组件,就可以向仓库提交你的分支啦。当你们需要合并分支时,最简单的就是将master分支指向dev的当前提交,合并完你甚至可以删除dev分支。

我们创建dev分支,然后切换到dev分支:
git checkout -b dev
Switched to a new branch 'dev'
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
git branch dev
git checkout dev
Switched to branch 'dev'
然后,用git branch命令查看当前分支:
  git branch
* dev
  master
git branch命令会列出所有分支,当前分支前面会标一个*号。

当我们开发完毕,使用git merge dev 就可以合并分支了,当然前提是你要切换成master分支喔,因为会合并到当前所在的分支。当你合并完记得提交到远程仓库哦,这个过程他是不会提示有新文件的

那么有人会问了,为什么和前面撤销一样都是checkout呀?

实际上,切换分支这个动作,用switch更科学。因此,最新版本的Git提供了新的git switch命令来切换分支:

创建并切换到新的dev分支,可以使用:
git switch -c dev
直接切换到已有的master分支,可以使用:
git switch master
使用新的git switch命令,比git checkout要更容易理解。

当我们有多人多分支时呢,我们需要在合并前呢,切换到主分支更新一下本地的仓库,因可能有人在你之前已经合并了。