首先需要了解一下几个命令的作用:
1  | git branch //创建分支  | 
分支:个人理解就是在当前工作区间向下衍生的一个分支,类似于继承,具有父节点的内容,不同的是,当分支修改时,原来的衍生体(父结点)不受影响。
下面拿一个简单的例子说一下就明白了:
在master下
1  | git init git_checkout_merge  | 
如果你返回master或者关闭git再次打开进入master,打开master.txt,你会发现里面只有
Initial commit on master
Second commit on master
1  | git log --oneline --decorate --groph - -all //查看历史示意图  | 
(其中每一次的commit用20位的十六进制SHA-1 Hash值来引用)
1  | git config - -global - -alias.lol “log --oneline --decorate --groph - -all”  | 
1  | git tag v1 93fab //后面接上前几位(足以区分的位数)SHA -1 Hash 表示给哪一个commit做标记  | 
1
git checkout v1 //切换到指定的分支
这时系统提示你,你处在于一个detached HEAD状态,HEAD引用直接指向一个commit,而不是一个分支名,再继续工作,切换到别的分支时可能造成数据丢失,同时告诉我们可以通过 git checkout –b <new-branch_name>的方式创建并切换到别的分支,其实git checkout –b <new-branch_name>就是 git branch 和git chechoutl两个命令的组合。
1  | git checkout –b fix_v1 //创建并切换到fix_v1分支  | 
提示需要先提交这些修改或者将这些修改stash起来
1  | git stash save –a “stash1“//切换分支之前保存本地修改 –a表示将暂存区一并保存  | 
1  | git stash pop - -index stash@{0} //用- -index将暂存区一并还原  | 
本地分支的合并
- fast-farword merge
1
2
3
4
5
6
7git checkout –b test_merge
vim master.txt
Initial commit on test_merge //写入内容
git add .
git commit –m “Initial commit on test_merge”
git checkout master
git merge test_merge 
因为test_merge衍生自master,所以这一次合并只是将HEAD引用指向test_merge
合并模型:

- non-fast-farword merge
注意示意图文件结构 
1  | git merge test //如果合并内容有冲突,可以取消在这次合并或者编辑冲突文件  | 
1  | git merge – abort //取消在这次合并  | 
1  | git add master.txt  | 
合并模型:
master此时和test并没有衍生关系,git merge test 会先生成一个commit用来承载两个的内容

1  | //SINCE20160116  | 
我的博客网站:http://huyuxin.top/欢迎大家访问!评论!