Git-03-分支合并及冲突
查看分支 git branch
创建分支 git branch 分支名
切换分支 git checkout 分支名
删除分支 git branch -d 分支名 (不能删除当前分支)
其他不能删除的情况: 包含 “未合并”的内容,删除分支之前 建议先合并
强行删除git branch -D 分支名
细节:
1.如果在分支A中进行了写操作,但此操作局限在工作区中进行(没add/commit)。在master中能够看到该操作。 如果分支A中进行了写操作 进行了commit(对象区),则master中无法观察到此文件
2.如果在分支A中进行了写操作,但此操作局限在工作区中进行(没add/commit)。删除分支A 是可以成功的。
创建新分支 并切换 :git checkout -b 分支名
git checkout -b new_branch
假如在A分支删除了a文件,没有add/commit
然后切换到B分支,这时在B分支中,a文件也是被删除的。你甚至可以在B分支中commit删除操作。在B分支中,a文件就是也就消失了。
但在A分支中,a文件还是完好的(状态不是deleted),如果想在A分支中删除它,则要在A分支中git rm并commit。
假如在A分支中修改了a文件,没有add 且 commit,然后切换到B分支,这时在B分支中也能看到这个修改的内容,但在B分支中无法提交该修改。只能在A分支中提交这次修改。
在A分支中add然后commit,这时B分支就不能看到修改的内容了。
合并分支
git merge new_branch (把new_branch分支合并到当前分支)
查看所有分支:git branch -v
分支本质:一个commit链,一条工作记录线
分支名 : 分支名指向当前的提交(commit)
HEAD:head是一个指针,指向当前分支(HEAD->分支名)
如果一个分支靠前(dev),另一个落后(master)。则如果不冲突, master可以通过 merge 直接追赶上dev,称为 fast forward。
fast forward本质就是 分支指针的移动.注意:跳过的中间commit,仍然会保存。
fast forward:
1. 两个分支 fast forward 归于一点commit
2.没有分支信息(丢失分支信息)
git在merge 时,默认使用fast fast forward ;也可以禁止 : git merge --no-ff
1. 两个分支 fast forward ,不会归于一点commit (主动合并的分支 会前进一步)
2.分支信息完整(不丢失分支信息)
冲突
合并:如果冲突 ,需要解决冲突。在不同的分支链中,合并有可能有冲突,因为同一个文件有可能内容不一样。而由于在不同的分支链中,故也没有落后/靠前的说法,故冲突会发生
,若在同一个分支链,那肯定是不会有冲突的,落后方直接合并到靠前方即可,文件内容最终跟靠前方一样。
解决冲突:
1.vi 修改文件内容,自己决定合并后的文件内容应该是怎样的
2.git add a.txt (假设冲突的文件是a.txt,这次操作是告诉git,a.txt文件的冲突解决了)
3. git commit -m "解决冲突"
git add xxxx(告知git,冲突已解决)
注意:master在merge时 如果遇到冲突 并解决,则解决冲突 会进行2次提交: 1次是最终提交,1次是将对方dev的提交信息commit也拿来了(意思是master分支中会有dev分支的节点)
如果一方 落后,另一方 靠前。则落后方可以直接通过merge合并到 靠前方。