接2018-02-26 那篇 git常用操作
接下来说说 branch、merge、rebase、tag用法、以及在实际项目中自己是如何使用Git的;
git branch
分支模型应该是git最NB的地方了;
1 | git branch -a # 所有分支,本地 |
git merge & rebase(衍合)
把分支的修改合并到主干的时候,用merge;
通常我们合并主干修改的时候, 用rebase;
一般merge用的较多,rebase较少用;
rebase:
rebase: 把一个分支里提交的改变移动到另一个分支里重放一遍;1
2
3
4#在master分支执行
git rebase dev #相当于把master分支上的修改,在dev(目标分支)上原样复制一遍!!!
git rebase -i # 可以很直观地看到 rebase过程;
merge 与rebase区别:
- merge只是一个合并操作;会将共同祖先及两个分支的最新提交并在一起, 会生成一个新的提交(三方合并);
而rebase 并没有进行合并操作,只是提取当前分支的修改,将其复制在了目标分支的最新提交后面; - 冲突处理策略不同:
merge遇到冲突直接停止,解决冲突commit后才能再次commit;
rebase遇到冲突会暂停当前操作,开发者可以手动选择解决冲突,开发者可以选择手动解决冲突,然后 git rebase –continue 继续,
或者 –skip 跳过(注意此操作中当前分支的修改会直接覆盖目标分支的冲突部分),
或者 –abort 直接停止该次rebase 操作。 - 有修改未commit时,不能进行rebase 操作;
看下图:
git tag
1 | F:\intellijRepo\JavaCodeRepo>git tag -d 0.1.3 # 删除本地分支 |
查看远程仓库tag列表:1
2
3$ git ls-remote --tags
0bdd02d19eaf90b36eaca4f4fa2a76d5a20d17b0 refs/tags/v0.2
10f25f7cb25ee5b64dbe8a322d13a208f0e1142c refs/tags/v0.2^{} # ^{} 表示v0.2 是包含附注的tag
git 实际项目使用
主要是针对多个功能分支,如何进行有效提交,
我使用的时候,一般按照下面步骤进行操作,保证了master主干分支的干净;
- 在自己的dev分支开发;
- dev分支修改提交;
- 切换到master分支,执行 git pull,获取最新代码,这里是不会冲突的;
- 切到dev分支,合并主干修改 (git rebase master) ,若有冲突在这个时候解决;
- 回到master分支;
- 执行 git merge dev,合并dev分支的修改;
- 在master分之上提交代码到远程仓库; git push origin master
其他
对于git理解只算是了解了冰山一角,想更深入理解,请多使用 git xxx --help
看官方的文档;