Git常用场景使用-分支操作
1. 拉取推送分支:
git branch 分支名 : 创建分支
git checkout 分支名 : 切换分支
git checkout –b 分支名 : 创建并切换到新分支
本地拉取分支后推送到远程:
git push <远程主机名><本地分支名>:<远程分支名>
【注意】直接git push会将当前本地分支推送到对应远端同名分支,如果远端没有同名分支则会新建同名分支
【举例】git push 和git push origin branchTest是等效的,都是将本地branchTest分支推送到远端
2. 分支切换:
举例的切换都是从branchTest切master分支
【场景1】分支切换后提示: Your local changes to the following files would be overwritten by checkout
【原因】:
如同push出现冲突问题一样,该切换问题是因为当前branchTest修改代码后,和master代码冲突
比如,master的File1未666666、777777两行;branchTest修改后把777777删掉了,切换的时候就会出现该问题;
如果branchTest修改时,不对master的代码做改动,即单纯的添加888888,则不会出现该问题。【解决1】:
Force Checkout会保留原汁原味的master代码,分支修改的代码不会出现再master
Smart Checkout选择让你手动解决冲突,可参考:链接的第4点
Don’t Checkout 就是让你放弃切换分支【解决2】:
Don’t Checkout放弃切换,然后commit一下,再切换,就不会有如上问题
但这样会导致本地存在多个commit,到时还得合并多个本地commit
3. 在错误的分支修改了代码:
【场景】在branchTest修改完代码后,发现分支错了,应该是要在master是修改的
【解决1】:
未commit情况下,切换master分支,如上解决冲突;
commit了的话,可以reset后再切换;当然如果改动不大,可以切换后重新修改吧,
【解决2】:
如果能确定push前远端两个分支的代码是一样的, 那么可以git push origin branchTest:master将branchTest提交的代码推送到远端commit分支
【解决3】:
如果push前远端两个分支的代码不一样,会push rejected
3-3-a. pull远端master代码到当前分支,会提示冲突,手动解决冲突
3-3-b. 代码重新commit
手动解决冲突后,可以看见log中,之前提交的commit已经断开了,所以需要重新提交commit
重新commit后,会自动合并回来,这样就可以git push origin
branchTest:master
【建议】修改代码前明确分支,提交代码前先拉取代码,有冲突则解决冲突。
4. 分支提交代码合并主分支
【场景】分支修改push完了,任务结束了,需要合并到主分支上
【举例】branchTest提交了修改,需要合并master
【bash操作】
3-1.在主干代码合并分支,执行git merge 远程仓库/分支名,例如:git merge origin/branchTest
3-2. 在主干上push代码:git push
【idea操作】
3-1.执行下图的选项
3-2. 勾选的是将要合并的分支,然后填上提交信息,然后再push就好了
其实合并就是将branchTest的commit信息和内容合成一个新的commit到master分支上,然后再在master上push上去
所以,这得保证新提交的代码已经push到分支上,才能去合并
【小乌龟操作】
3-1.切换到要合并的分支,即master后到工作空间执行下图的选项
3-2.选择填写的东西和注意事项和上述idea操作一样,之后再push即可:
【建议】合并操作时,最好主干代码重新拉取后再merge,如果冲突需要耐心解决冲突。
5. 同一个commit提交到不同的分支
【场景】提交了update File2到branchTest分支,需要保持syncBranchTest分支同步修改
【操作】可以像上述合并的方式提交,但需要代码已经合入了branchTest;除此之外,其实可以在push的时候选择新的分支即可
在branchTest分支上操作,(不像merge时是在master上操作),push的时候选择syncBranchTest分支
-------------------------------------------------想到别的场景后续再补充------------------------------------------------------------