一、创建分支
git branch [分支名]
创建出来的分支和原分支是一模一样的,里面的内容都没有变。注意创建出来的分支不是空分支。
二、查看所有分支
git branch -v
三、切换分支
git checkout [分支名]
四、删除分支
git branch -d [分支名]
五、合并分支内容
当前分支合并被合并分支: git merge [被合并分支]
核心总结:如果两个分支合并时,产生了新节点【判断是否产生新节点的依据是,A和B合并时,是否之前已经出现了合并结果了】,就会需要-m 参数 来 添加 提交备注,否则不需要 -m 参数 来 添加提交备注。
不存在行冲突时:git 分支合并是以 行
作为单位的,不存在行冲突就自动合并了。
如果 A和B一开始是一模一样的,A修改了提交生成 A+。
此时 A+ merge B
,结果是没有变化,仍是 A+。
如果接着 B merge A+
,则 B变成了A+ ,且没有产生新节点,不需要添加提交信息。
如果 A和B一开始是一模一样的,A修改了提交生成 A+,且 B修改成了B+。
此时 A+ merge B+
,生成 A++,需要添加提交备注,也可以直接输入 A+ merge B+ -m "XX"
如果接着 B+ merge A++
,则B+ 变成了 A++,且没有产生新节点,不需要添加提交信息。
存在行冲突时:在同一行 合并和被合并分支 都修改过了。
1、AB合并之前已经有合并结果了,比如A分支合并了B分支,产生了A+节点,此时B分支再合并A分支时,也只会变成A+节点。
2、AB合并之前还未出现合并结果,此时需要将所有冲突文件都添加到暂存区,然后提交(这里的 git commit 不需要再写文件名了,但是提交备注还是需要的)产生新的合并后节点。
aaaaaaa bbbbbbb ccccccc ### modify by master ddddddd eeeeeee fffffff git commit apple.txt -m "modify apple by master" ===========上面是主分支进行的修改提交====下面是被合并分支进行的修改提交=========== aaaaaaa bbbbbbb cccccc ### modify by hot_fixc ddddddd eeeeeee fffffff git commit apple.txt -m "modify apple by hot_fix"
结果显示:存在冲突。
cooldeMacBook-Pro:git-learn cool$ git merge hot_fix Auto-merging apple.txt CONFLICT (content): Merge conflict in apple.txt Automatic merge failed; fix conflicts and then commit the result. cooldeMacBook-Pro:git-learn cool$ git branch -v hot_fix f411b30 modify apple by hot_fix * master 44bc206 modify apple by master cooldeMacBook-Pro:git-learn cool$
查看当前合并冲突的状态信息:
cooldeMacBook-Pro:git-learn cool$ git status On branch master You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add <file>..." to mark resolution) both modified: apple.txt no changes added to commit (use "git add" and/or "git commit -a") cooldeMacBook-Pro:git-learn cool$
需要手动修改提交:下面就是 冲突文件的信息,需要自己修改。
aaaaaaa bbbbbbb <<<<<<< HEAD ccccccc ### modify by master ======= cccccc ### modify by hot_fixc >>>>>>> hot_fix ddddddd eeeeeee fffffff
合并冲突时需要修改所有有冲突的文件,然后对每一个冲突文件执行 git add [冲突文件名]
,当所有冲突文件都添加到暂存区后,执行 git commit -m “日志信息”
注意:此时commit 一定不能带具体文件名。
如果想直接git commit -m "信息"
就会报错了。
cooldeMacBook-Pro:git-learn cool$ git commit -m "测试一下" U apple.txt error: Committing is not possible because you have unmerged files. hint: Fix them up in the work tree, and then use 'git add/rm <file>' hint: as appropriate to mark resolution and make a commit. fatal: Exiting because of an unresolved conflict. cooldeMacBook-Pro:git-learn cool$
所以必需要先将冲突文件 添加到 暂存区,然后再执行 git commit -m “xxx”【后面不加 -m 参数时,需要进入 vim 编辑 添加提交信息】
下面是修改好,合并到本地库的文件。
aaaaaaa bbbbbbb <<<<<<< ccccccc ### modify by master ======= cccccc ### modify by hot_fixc >>>>>>> ddddddd eeeeeee fffffff
[注意master合并了hot_fix后,master 现在已经提交了合并,生成了新节点,此时再合并 hot_fix 会提示 已经合并过了,不能合并]
而此时,hot_fix 还是 :
aaaaaaa bbbbbbb cccccc ### modify by hot_fixc ddddddd eeeeeee fffffff
转到 hot_fix 分支, git merge master ,是可以合并的,如下结果
cooldeMacBook-Pro:git-learn cool$ git merge master Updating f411b30..2faa553 Fast-forward apple.txt | 4 ++++ 1 file changed, 4 insertions(+) cooldeMacBook-Pro:git-learn cool$ vim apple.txt
显示合并后的文件信息
aaaaaaa bbbbbbb <<<<<<< ccccccc ### modify by master ======= cccccc ### modify by hot_fixc >>>>>>> ddddddd eeeeeee fffffff