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合并到 靠前方。

原文地址:https://www.cnblogs.com/kenLoong/p/15202163.html