什么是分支
在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个任务的单独
分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时
候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是
一个单独的副本。(分支底层其实也是指针的引用)
分支的好处
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败
的分支删除重新开始即可。
分支的操作
创建分支 : git branch 分支名
查看分支: git branch -v
切换分支 : git checkout 分支名
把指定的分支合并到当前分支上 : git merge 分支名
查看当前分支
git branch -v
root@ZJJ MINGW64 /f/projectDemo (master)
$ git branch -v
* master e694c82 第二次提交
创建分支
命令: git branch [分支名字]
$ git branch fenzhi1
查看分支
发现已经出现了你刚刚创建的fenzhi1 这个分支
$ git branch -v
fenzhi1 e694c82 第二次提交
* master e694c82 第二次提交
root@ZJJ MINGW64 /f/projectDemo (master)
切换分支
git checkout [要切换的分支名字]
$ git checkout fenzhi1
Switched to branch 'fenzhi1'
root@ZJJ MINGW64 /f/projectDemo (fenzhi1)
此时你会发现 root@ZJJ MINGW64 /f/projectDemo (fenzhi1) ,注意观察括号里面的内容fenzhi1,这个就是你文件的当前的分支.
$ git branch -v 查看下分支,可以发现你刚刚切换的fenzhi1 这个分支在最上面了,说明切换分支成功了.
$ git branch -v
* fenzhi1 e694c82 第二次提交
master e694c82 第二次提交
在新分支上修改提交
在fenzhi1上进行文件修改,然后将修改完成的文件进行提交
root@ZJJ MINGW64 /f/projectDemo (fenzhi1)
$ git add hello.txt
root@ZJJ MINGW64 /f/projectDemo (fenzhi1)
$ git commit -m"在fenzhi1上第一次提交代码" hello.txt
[fenzhi1 1bb7833] 在fenzhi1上第一次提交代码
1 file changed, 1 insertion(+), 1 deletion(-)
root@ZJJ MINGW64 /f/projectDemo (fenzhi1)
然后你去.git文件夹下打开HEAD文件,发现里面ref引用到了fenzhi1这个分支了.
然后你去看heads文件下的 fenzhi1这个文件里面的版本号,就是你刚刚提交的代码的版本号
切换回别的分支
git checkout [要切换的分支名字]
root@ZJJ MINGW64 /e/projectDemo (fenzhi1) # 注意括号里面fenzhi1 是你当前的分支
$ git checkout master
Switched to branch 'master'
root@ZJJ MINGW64 /e/projectDemo (master) # 注意括号里面master , 说明你已经切换回来master分支了
合并分支
把指定的分支合并到当前分支上 : git merge 分支名
我想把fenzhi1分支合并到master分支上
git merge [要合并的分支名字]
root@ZJJ MINGW64 /e/projectDemo (master) # 注意括号里面的内容,(master)的意思就是当前分支是master分支
$ git merge fenzhi1 # 意思是将fenzhi1合并到当前分支,也就是master分支上
Updating e694c82..1bb7833
Fast-forward
hello.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-) # 一个文件被修改 1行被删除,1行被添加
这里需要注意,你想把哪个分支合并到当前分支,就git merge 哪个分支
合并冲突解决
我在master分支修改hello.txt第一行,然后commit操作
然后我在fenzhi1分支修改hello.txt第一行,然后commit操作
我切换到master分支上,把fenzhi1上的文件合并到master分支上,此时就会出现冲突了,因为两个分支都修改了第一行,git无法决定选哪个分支上的数据,所以就得由操作者自己决定.
root@ZJJ MINGW64 /e/projectDemo (master)
$ git merge fenzhi1
Auto-merging hello.txt
CONFLICT (content): Merge conflict in hello.txt # 合并代码冲突在 hello.txt文件里面
Automatic merge failed; fix conflicts and then commit the result. # 自动合并失败了,
root@ZJJ MINGW64 /e/projectDemo (master|MERGING) #此时括号里面的内容是(master|MERGING),说明此时有文件正处于合并中状态
$
查看本地库状态
$ 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: hello.txt
no changes added to commit (use "git add" and/or "git commit -a") # 此时显示这个没有合并成功,有两个分支都修改了这个文件的同一行
root@ZJJ MINGW64 /e/projectDemo (master|MERGING)
此时就需要操作人员手动打开文件进行代码合并了.打开hello.txt文件
一番对比之后,我决定要我自己的代码,然后我就把代码改成下面的样子,删除git那些 ===== <<<<<< 符号,然后进行代码添加提交
我是在master分支上修改的
hello.zjj
hello.zjj
hello.zjj
hello.zjj
hello.zjj
hello.zjj
hello.zjj
hello.zjj
hello.zjj
hello.zjj
hello.zjj
hello.zjj
hello.zjj
hello.zjj
hello.zjj
hello.zjj
将代码挪到暂存区并且进行提交操作
这里有个注意点,就是git commit的时候不能带上文件名
$ git commit -m “我进行代码冲突解决” hello.txt
上面这样会报错,提示 : 不能在合并期间执行部分提交。
得去掉文件名,比如说这样:
$ git commit -m “我进行代码冲突解决”
root@ZJJ MINGW64 /e/projectDemo (master|MERGING)
$ git add hello.txt
root@ZJJ MINGW64 /e/projectDemo (master|MERGING)
$ git commit -m "我进行代码冲突解决" hello.txt
fatal: cannot do a partial commit during a merge.
root@ZJJ MINGW64 /e/projectDemo (master|MERGING)
$ git commit -m "我进行代码冲突解决"
[master 4b6302d] 我进行代码冲突解决
root@ZJJ MINGW64 /e/projectDemo (master)
解决完了冲突之后,你会发现
root@ZJJ MINGW64 /e/projectDemo (master|MERGING) 变成了root@ZJJ MINGW64 /e/projectDemo (master)
(master|MERGING) 变成了(master) ,说明解决完了冲突了.
注意,此时你合并是修改master的内容的, 并不会修改原来的分支的内容
比如说我将fenzhi1合并到master分支上,然后此时出现冲突了,我修改完了之后进行commit,我只是改变了master分支上的文件,并不会改变fenzhi1上的文件.