首先需要了解一下几个命令的作用:
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/欢迎大家访问!评论!