在进行分支相关的操作前, 我们需要保持主分支干净, 所谓的干净就是没有任何改变(所有更改都已经commit 并 push),那么你可以在任何时候从你的主分支创建一个新分支。
为了方便代码管理,我们应该始终保持主干分支干净,为了其他新增需求或差异版本去创建相应分支。 如果主干分支上有问题要修改,我们最好不要在主干分支上直接修改,而是为了修改这个问题
专门去创建一个分支,当问题修改测试完成稳定后,把这个分支合入到主干分支,完了可以删除掉这个分支(当然,根据实际情况也可以保留)。然后主干上的这个修改就可以通过合并,同步到其他的分支上去。
查看分支:
查看所有已存在的分支,你可以使用: git branch
例如:未拉分支之前,我们查看只有一个主分支master,前面带*号的代表当前所在的分支
新建分支:
在本地电脑新建一个分支: git branch <新分支名字>
将新分支发布在github上: git push origin <新分支名字>
创建成功后查看:可见多了一个分支b1,目前位于master分支
切换分支:
切换到目标分支: git checkout <分支名字>
下图可见用命令已经切换到新建的b1分支上面
删除分支:
注意:不能删除当前所在分支,要删除某个分支,必须先切换到其他分支上
在本地删除一个分支: git branch -d <本地分支>
在github远程端删除一个分支: git push origin :<远程端分支>
在b1分支删除b1分支:(error)
在master分支删除b1分支:(ok)
合并分支:
命令如下: git merge <分支名字>
注意:该命令是将 <分支名字> 的改动合并到你当前所在分支,
【1】如果当前所在分支是master,那么合并到master之后,master分支需要进行push操作
1.切换到master分支
2. 将b1分支合并到master分支
3.可见master分支有变动,需要提交来更新到远程服务器
4. 提交master合并后的更新到远程服务器
5. 查看ok!!
【2】如果当前所在分支不是master,那么合并到当前分支之后,当前分支的本地和远程就都是合并后的最新状态,不需要进行push操作
1.切换到b1分支
2.将master合并到b1
3. 查看ok!!
查看分支之间的不同:
$ git diff branchName 查看当前分支与branchName分支之间的差异,也可以使用:$ git diff branch1 branch2 来比较这1和2分支之间的差异,当使用第一种方式比较时,如果当前工作目录中存在与branchName同名的文件,系统则会提示错误,要是指明要比较的是文件还是分支,如果比较分支,可以进入.git中进行比较或切换分支,如果是>比较文件,则使用$ git diff -- fileName命令。
$ git diff <branchA>:<fileA> <branchB>:<fileB>
$ git ls-tree -r branch 列出所有的树对象
合并冲突:
如果在不同的分支中都修改了同一个文件的同一部分,Git 就无法干净地把两者合到一起(译注:逻辑上说,这种问题只能由人来裁决。)
任何包含未解决冲突的文件都会以未合并(unmerged)的状态列出。Git 会在有冲突的文件里加入标准的冲突解决标记,可以通过它们来手工定位并解决这些冲突。
在解决了所有文件里的所有冲突后,运行 git add 将把它们标记为已解决状态(译注:实际上就是来一次快照保存到暂存区域。)。因为一旦暂存,就表示冲突已经解决。如
果你想用一个有图形界面的工具来解决这些问题,不妨运行 git mergetool,它会调用一个可视化的合并工具并引导你解决所有冲突。
要从该清单中筛选出你已经(或尚未)与当前分支合并的分支,可以用 --merge 和 --no-merged 选项(Git 1.5.6 以上版本)。比如用 git branch --merge 查看哪些分支>已被并入当前分支(译注:也就是说哪些分支是当前分支的直接上游。)