03-git代码合并

分支即是平行空间,假设你在为某个手机系统研发拍照功能,代码已完成了80%,但如果将这不完整的代码直接提交到git仓库中,以有可能影响到其他人的工作,此时我们便可以在该软件的项目之上,创建一个名叫"拍照功能"的分支,这种分支只会属于你自己,而其他人看不到,等代码编写完成后再与项目主分支合并下即可,这样即能保证代码不丢失,又影响其他人的工作。



一般在实际的项目开发中,我们要尽量保证master分支(master就是线上的代码)是非常稳定的,仅用于发布新版本,平时不要随便直接修改里面的数据文件,而工作的时候则可以新建不同的分支,等到工作完成后在合并到master分支上面,所以团队的合作分支看起来会像上面图那样。

创建分支:
git branch testing ## 新建testing 分支

查看分支:
git branch ## * 号在那就说明当前在那个分支上


代码合并:
创建aaa bbb ccc 文件,分别提交。
touch aaa bbb ccc
git add aaa
git commit -m "add aaa"
git add bbb
git commit -m "add bbb"
git add ccc
git commit -m "add ccc"





++++++++++++++++++++++++++++++++++++++
切换到testing 分支:
git checkout testing


git branch


ll #查看文件,发现什么也没有,这是因为我们在提交aaa bbb ccc之前,就创建了分支,所以说,切换到这个分支,没有我们后来创建的文件。我们可以删除这个分支,再重新创建。

删除分支:
先切换到master 分支
git branch -d testing


++++++++++++++++++++++++++++++++++++++++
二、创建testing分支,touch 一个 test-ddd 并提交
+++ git checkout -b testing ## 创建并切换到testing 分支


这时,查看指针,指向了那里。
git log --oneline --decorate



HEAD 指向了 testing 和 master 的最后一次提交,就说明当前,它两个是一样的。
新创建一个test-ddd
touch test-ddd
git add .
git commit -m "add newfile test-ddd"



这时,再查看指针指向了那
git log --oneline --decorate



三、切回master ,touch 文件master-eee 并提交
这时,切换回master 分支,查看指针和文件。




在master 分支上面创建一个 master-eee
touch master-eee
git add .
git commit -m "add newfile master-eee"




四、合并testing分支:在master 合并其他分支
git merge testing




当testing分支被合并完后,就没用了。

当我们分支上把新的功能写完后,合并到了主干上,想要再开发新的功能,我们把原分支删除,重新创建一个分支就可以了。
git branch -d testing ##首先要确保是在master 分支下





++++++++++++
代码冲突合并:
先创建一个test 分支
我们首先在master 往aaa 里面追加一些内容:,再提交到本地仓库。
cat aaa
git branch test
git branch
echo master >> aaa
git commit -am "modified aaa add master"




切换到test 分支,再追加一些内容到aaa ,再提交到本地仓库
git checkout test
cat aaa
echo testing >> aaa
git commit -am "modiefied aaa add testing"
cat aaa


+++++++
这时,master 分支的aaa 内容是 master ,test分支 aaa 是testing
合并的时候谁生效呢?
我们切换回master
git checkout master
git branch
git merge test


有冲突的文件会给你加上小于号,大于号,等于,问你想保留那一个


怎么处理这个冲突呢?


出现冲突,我们没有其他办法来解决冲突,只能手动来改变这个冲突。
vim aaa
删除特殊符号行,自行决定留那一个,或者都要,直接保存。再提交到本地仓库。
git commit -am "merge testing"