文章目录

作为开发人员,我们应该尽可能多地建立分支,在分支上进行开发,功能测试稳定后,再将分支上地代码合并到指定的分支

git本地分支管理_git

  • git branch:查看本地分支
  • git branch -r:查看remote分支
  • git remote:查看remote分支
  • git branch -a:查看本地分支以及remote分支

小张在Windows操作,发现冒泡排序的效率太低,希望能改成快速排序。小张可以直接在本地master分支上进行代码修改,为了避免自己修改了master,然后push的时候和别人产生冲突,小张决定建立一个新的分支,在新分支上写自己的代码

  • git branch -vv:查看本地和远程分支的对应关系

git本地分支管理_github_02

一、master分支没有改变,合并其他分支

  • git checkout -b 分支名:创建新分支并切换

小张创建新分支sortdev,并切换到sortdev分支

git本地分支管理_远程分支_03


git本地分支管理_git_04


小张这时已经工作在本地的sortdev分支,git pull同步远程和本地的分支

git本地分支管理_git_05

报错了,查看一下本地分支和远程分支的对应关系(这里指定对应关系即可pull,比如git pull origin master:sortdev)

git本地分支管理_远程仓库_06

我们发现本地的sortdev分支并没有远程的分支与之对应,因为我们只在本地创建了sortdev,并没有指定远程的对应分支。而我们如果切换会本地的master分支,再次git pull就能成功,因为本地master分支和远程分支是有对应关系的

切换回master分支,git pull同步代码后,切换回sortdev分支

git本地分支管理_git_07

小张将冒泡排序修改为快速排序后

git本地分支管理_远程分支_08


修改代码后,从本地的sortdev分支push到远程的master分支

git本地分支管理_远程仓库_09


这样是无法完成的,本地的sortdev和远程分支没有对应关系,而输入的​​git push origin master​​的意思是把本地的master分支推送到远程的master,但是我们的修改是在sortdev分支上完成的。需要用本地的master分支merge本地的sortdev分支,然后从本地master分支push到远程master分支

  • git merge 分支名:将指定分支的修改合并到本地分支

git本地分支管理_远程分支_10


其实在master分支merge后,本地仓库就已经是合并sortdev后的结果了,由于在sortdev分支已经进行了add、commit,merge后不需要再在master上进行add、commit了,直接push即可

git本地分支管理_远程分支_11


其实就是这样:我们在本地新建分支后,新建一个分支,然后在新的分支上修改代码,修改测试完成后再merge到master分支,然后从本地的master分支push

  • git branch -d 分支名:删除分支,如果要删除分支上还有修改没有合并到当前分支,小写的d不能删除,需要用大写的D强制删除

git本地分支管理_远程分支_12


除了切换到master分支再push,还可以指定push到哪个远程分支

git本地分支管理_git_13

二、master分支有改变,合并其他分支

上一小节把sortdev01分支合并到master分支上时一切顺利,是因为sortdev01分支在合并的时候,

master分支没有做过任何改动,看图:

git本地分支管理_git_14


实际上有可能发生这样的情况:

  1. 啊亮从master分支创建了一个新的分支sortdev01,进行代码开发测试,提交
  2. 小张更新了master分支上的代码
  3. 啊亮切换分支到master,git pull同步远程仓库master主干的最新代码,发现有变化
  4. 啊亮直接git merge sortdev01就发生冲突了

git本地分支管理_远程分支_15


实际操作如下

git本地分支管理_远程仓库_16

通过git diff命令查看一下README.MD文件的冲突,在master主干上手动解决冲突,并提交远程仓库

git本地分支管理_github_17


然后再通过git add、git commit、git push把修改推送到远程origin仓库的master主干分支上,冲突就解决完了

总结:

  • 查看分支: git branch
  • 创建分支: git branch
  • 切换分支: git checkout
  • 创建+切换分支: git checkout -b
  • 合并某分支到当前分支: git merge
  • 删除本地分支: git branch -d 如果分支上有更新没有merge,git会提示你merge,强制删除用-D
  • 本地分支推送到远程分支:git push <远程仓库名> <本地分支名>:<远程分支名>
  • 远程分支合并到本地分支:git pull <远程仓库名> <远程分支名>:<本地分支名>