一、Git常用命令
#更新
git pull
#将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并
git pull origin master:brantest
#远程分支是与当前分支合并,冒号后面的部分可以省略
git pull origin master
#添加指定文件(将需要进行版本控制的文件放入暂存区)
git add 文件名
#添加所有文件(将需要进行版本控制的文件放入暂存区)
git add .
#查看当前的状态
git status
#提交文件(将暂存区的文件提交到本地git仓库)
git commit -m '添加内容'
#推送文件(将本地仓库的文件Push到远程仓库)
git push origin master
#推送
git push
二、分支的作用
几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着,你可以把你的工作,从开发主线上分离开来,然后在不影响主线的同时继续工作。
分支对于团队开发非常重要,比如说一个项目现在是1.0版,那么开发团队可能要同时进行1.1版和2.0版的开发,这样代码就会出现较大分歧。这时候就需要用到分支了,不同的任务组在不同的分支上开发,互相之间不会影响。或者,需要向项目中添加一个新功能,一般的团队都不会直接在主分支上修改,都会新建一个分支,在上面更改代码。这样做的好处就是保证主线代码的完整性和可用性,也就是说,主线上都是稳定的代码,可以直接拿来发布的。
三、git commit
- git commit的时候不要把不希望别人看到的代码commit上去,并且在commit的时候要检查代码。
【例如:我只是修改一下端口号,自己用着方便,不需要别人也更改,就不需要把这个修改commit上去】
- 如果说一个文件没有commit,那么我切换分支的时候,改动会被带过去;如果说这个文件commit了,那么切换分支的时候,改动不会被带过去
- 总结:未commit的文件会在切换分支时被到处携带,直到执行commit的时候,未commit的文件才固定下来,归属于执行commit命令时的那个分支。
四、git merge和git rebase
对于我们团队来说,强制要求使用git rebase,这样的话分支管理会比较清晰。
首先我们应该知道git merge和git rebase都是用于把一个分支整合进另一个分支,只不过他们达成此目的的方式不同。
例:如下图所示,假设master分支中新增的内容与feature中正在开发的新功能有关系,为了把master分支中的新增内容合并到feature分支中,就有两种方法一种是git merge,一种是git rebase。接下来我们进一步解释merge和rebase的区别。
git merge
使用git merger就是将master分支中合并进feature分支,这会在feature分支中创建一个合并提交,这次提交会连结两个分支的提交历史。
合并操作很友好,因为它没有破坏性。现存的分支历史不会发生什么改变。
但是也意味着每当feature分支需要应用上游分支的更改时,都会在提交历史上增加一个无关的提交历史。如果main分支的更新非常活跃,这种操作也会对功能分支的提交历史产生相当程度的污染,使得分支结构提交历史变得杂乱不清晰。使用rebase就解决了这种问题。
git rebase
顾名思义,rebase就是重新设置基准的意思,意味着,我们使用git rebase命令就可以将feature分支的提交历史重新设置基准到master分支的提交历史的顶端,如下图所示:
使用rebase操作的最大好处在于你可以让项目提交历史变得非常干净整洁。首先,它消除了git merge操作所需创建的没有必要的合并提交。其次,正如上图所示,rebase会造就一个线性的项目提交历史——也就是说你可以从feature分支的顶部开始向下查找到分支的起始点,而不会碰到任何历史分叉。
rebase的缺点
①不当使用容易造成严重后果,要严格遵守黄金法则【永远不要在公共分支上使用 rebase 多人协作分支,同步主干,请使用 merge 】
②难以追溯历史,比如上面的 feature 分支在 rebase 之后,无法知道是什么时候从 main 切出进行的修改。无法知道什么时候合入的 main 分支。
五、分支管理
特性分支
首先说开发流程CI/CD,其中包含几个特性分支:
- dev:开发环境,从feature去merge
- test:测试环境,从feature去merge
- pre/release:预生产环境,从master去merge,为了验证master代码
- master生产环境,从feature去merge
- feature:开发分支---小功能,feature创建的时候从master拉取
- hotfix:bug修复分支,从master拉取