idea使用git更新代码 : update project(git merge、git rebase)
idea使用git更新代码 :
选中想要更新的项目,右键点击 git => repository => pull
这样使用一次后idea会自动建立选中分支的远程跟踪分支,以后可直接点击下图按钮,不需要再选分支,除非要拉取另一分支
update project 的两个选项
说明:为避免在前后相对位置懵逼,先讲明越靠后的提交越新,越顶端的提交越新
git merge
git merge b : 将b分支合并到当前分支
图解(主分支master, git merge test)
D---E test
/
A---B---C---F master
使用merge合并:
D--------E
/ \
A---B---C---F----G
工作流
1. git pull (或fetch && merge)
2. 解决冲突
3. 再次git pull
git rebase
git rebase 目标分支
rebase:翻译成中文是重新设定
git rebase 你其实可以把它理解成是“重新设置基线”,将你的当前分支重新设置开始点。
rebase会把你当前分支的 commit 放到最后面,将rebase后的目标分支的commit当作基点放在前面,通俗的说就是将目标分支的提交作为你当前分支的基点,所以叫变基
图解(主分支master git rebase test)
D---E test
/
A---B---C---F master
git rebase test合并:
A---B---D---E---C'---F' test, master
如图主分支的基点变成了test的几个commit,可能会覆盖别人代码,所以不要在公共分支使用rebase
工作流
git rebase
while(存在冲突) {
git status
找到当前冲突文件,编辑解决冲突
git add -u
git rebase --continue
if( git rebase --abort )
break;
}
区别
- 两个使用场景是不一样的,merge只是合并目标分支的内容,rebase也合并另外一个分支的内容,但是会把本分支的commits顶到最顶端
- git merge 会生成一个新的合并节点,而rebase不会
使用场景
- 都在同一个分支开发,为了提交记录更好的可读性,用
git pull --rebase origin master
- 开发分支拉取主分支时。为了让你最新开发的提交记录在最前面,也建议用
rebase
假设我们现在有3个分支
- master分支:线上环境使用的分支
- testing分支:测试环境使用的分支
- my_feature分支:开发新功能的分支,也就是当前分支
A. 假设我在my_feature上开发了一段时间,之后另外的同事开发的功能正式上线到master分支了,那么我可以在当前的分支下rebasemaster分支,这样我这个分支的几个commits相对于master还是处于最顶端的,也就是说rebase主要用来跟上游公共分支同步,同时把自己的修改顶到最上面
B. 我在my_feature上开发了一段时间了,想要放到test分支上,那就切到test,然后git merge my_feature
,因为test是公共分支,最好是用merge
注意
-
不要在公共分支使用rebase拉取其他分支,rebase会打乱时间线,使远程仓库和本地仓库对不上,导致其他人无法推送代码
-
使用git pull时默认是merge, 加 --rebase参数使其使用rebase方式 : git pull --rebase