分支管理
1.创建和切换分支
-
- 创建分支:
git branch [新分支名称]
。
- 创建分支:
-
- 切换分支:
git checkout [分支名]
。
- 切换分支:
-
- 创建并切换分支:
git checkout -b [分支名]
- 创建并切换分支:
-
- 合并分支:
git merge [分支名]
。将指定的分支代码合并到当前分支上来。
- 合并分支:
-
- 查看所有分支:
git branch
。
- 查看所有分支:
-
- 修改完直接提交:
git commit -a -m ""
- 修改完直接提交:
2.合并分支冲突处理
<<<<<<< HEADf
i love python
=======
i love git
>>>>>>> dev
解释:
<<<<<<< HEADf
i love python 是属于HEAD指针指向的分支的代码。
也就是当前分支的代码。
=======
=======
i love git 是属于dev分支的代码。
>>>>>>> dev
2.2解决办法:
说白了,该删删!!!
-
- 如果
dev
分支上面的代码应该保留下来,那么就应该把当前分支
的代码删掉,并且把<<<HEAD,===,>>>dev删掉,值留下dev分支的代码
- 如果
-
- 如果
dev
分支上面的代码是写错了,应该保留当前分支的代码,
这时候,就留下当前分支的代码,并且把<<<HEAD,===,>>>dev删掉。
- 如果
-
- 有些时候,dev分支和当前分支代码都选择性的保留或者都要保留,
这时候,就需要人工去干预,看哪些代码要保留,哪些代码要删掉,
但是<<<HEAD,===,>>>dev是必须要删掉的。
- 有些时候,dev分支和当前分支代码都选择性的保留或者都要保留,
非常重要的一点是。解决完冲突以后。这个文件相当于重新配置,需要重新add
和 commit
3.合并没有历史相关的commit
我们本地有一个仓库了,然后远程也有一个仓库了。这时候如果我们在本地仓库直接拉
远程仓库的代码,会提示以下错误:
fatal: refusing to merge unrelated histories
原因是远程仓库的commit和我们本地仓库的commit是没有历史相关的,这时候如果我们
还是想要进行合并,那么可以使用--allow-unrelated-historeis
参数:
$ git pull --allow-unrelated-histories origin master
只要本地代码进行了commit
,拉代码的时候就不会被覆盖掉,顶多是产生冲突。
重要的事情说三遍:
做任何pull
操作之前,一定要先进行commit
。
做任何pull
操作之前,一定要先进行commit
。
做任何pull
操作之前,一定要先进行commit
。
(如果你和同事都修改了同一个文件,然后同事先把代码提交到服务器了,这时候如果
你不commit直接pull,那么你同事的代码会把你本地的代码该覆盖掉了,这时候,神仙也救不了你了。)
git remote add origin url //添加远程仓库
然后如果直接git pull origin master会出错
原因是因为本地和云端是两个不关联的仓库,需要允许不关联的进行合并
git pull --allow-unrelated-histories origin master
4.本地分支和远程仓库关联
如果想远程创建一个分支
那么需要在本地先创建一个该分支,比如xiaosheng
git checkout -b xiaosheng
然后推送到远程
git push origin xiaosheng
关联
git branch -u origin/分支名称
输入命令git branch -vv
可以查看本地分支和远程分支的关联情况。
(如果出现了类似以下的输出,那么说明是已经关联了:)
如果出现了类似以下的输出,那么说明是已经关联了:
master b9bfb09 [origin/master]
如果没有关联,那么这时候可以用git branch -u origin/分支名称
进行关联。前提是
远程有这个分支。比如本地有dev分支,但是远程没有dev分支,这时候我们应该先把
本地分支推送到远程上去,git push origin 分支名
来创建一个dev分支。
4.1关联有什么好处呢?
以后我们只要通过git push 分支名
就可以将本地当前分支,推送到关联的远程分支。
5.远程拉取分支
如果在多人开发中,你的领导创建了一个dev分支,用来作为发布前的协作分支,并且
已经把dev分支推送到了远程,那么这时候我们怎么在本地进行关联呢?
# 是把远程仓库的数据在本地进行更新。
$ git fetch origin
# 创建一个新的分支,并且把远程的origin/zhiliao和本地的zhiliao进行关联
$ git checkout -b zhiliao origin/zhiliao
# 将origin/zhiliao的分支上的代码合并到zhiliao分支
$ git merge origin/zhiliao
正常来说:pull=fetch+merge;但是此处只能这样,如果pull,因为本地没有这个分支,会将远程gitbash代码与当前分支dev合并,也就是两个不相干的分支合并,就会有问题
比如现在在dev分支上,不要pull远程的其他分支(比如zhiliao),这样会把代码搞得
很乱。
6.删除远程分支
当工作已经完成了,代码也已经合并到master
分支了,这时候可以把这个远程分支删掉了。可以通过以下命令来实现:
$ git branch -d xs 删除本地的`xs`分支
$ git push origin --delete xs 删除远程的`xs`分支。
git log --graph --oneline 可以以图像形式显示出来