分支即是平行空间,假设你在为某个手机系统研发拍照功能,代码已完成了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"