Git 分支管理

Git 分支:

(1) 分支( branches ) 是指在开发主线中分离出来的一条支线,在支线上做进一步开发而不影响到原来主线,就好比游戏中的主线任务、分支任务
(2) Git 中的 master 分支,和其他分支一样,通常我们会把这个分支作为主分支,这个分支是在 git init 命令运行时默认创建的一个分支,是默认的一个分支
(3) 平常我们开发的时候不要在 master 分支上进行开发,创建别的分支进行开发,等到要发布到线上的时候再全部合并到 master 分支

git branch                    # 查看分支
git branch <branch_name>      # 创建分支
git checkout <branch_name>    # 切换分支
git merge <branch_name>       # 合并分支
git branch -d <branch_name>   # 删除分支


如何把其他分支的代码合并到主分支:

[root@localhost ~]$ cd /data/git
[root@localhost git]$ git branch dev      # 我们先创建一个分支
[root@localhost git]$ git checkout dev    # 然后切换到这个分支
[root@localhost git]$ touch 1.txt         # 提交文件到这个分支
[root@localhost git]$ git add 1.txt
[root@localhost git]$ git commit -m 'add new file' 1.txt
[root@localhost git]$ git checkout master    # 切换到主分支
[root@localhost git]$ git merge dev          # 把dev分支的代码合并到主分支


分支合并时冲突:

如下,当 master 和 dev 两个分支都对 1.txt 进行了修改,合并分支时就会造成冲突

[root@localhost git]$ git checkout dev      
[root@localhost git]$ echo "aaa" >> 1.txt
[root@localhost git]$ git commit -m 'add some character to file' 1.txt
[root@localhost git]$ git checkout master   
[root@localhost git]$ echo "bbb" >> 1.txt
[root@localhost git]$ git commit -m 'add some character to file' 1.txt
[root@localhost git]$ git merge dev  
Auto-merging 1.txt
CONFLICT (content): Merge conflict in 1.txt
Automatic merge failed; fix conflicts and then commit the result.

解决分支冲突的方法:

在 master 分支下,把文件修改成 dev 分支里的内容,然后再合并 dev 分支。但是有一个问题,如果 master 分支下的修改才是我们想要的呢?我们可以先编辑 1.txt ,改成想要的,然后提交,再切换到 dev 分支,把 master 分支合并到 dev 分支 ( 倒着合并 ),合并分支有一个原则,那就是要把最新的分支合并到旧的分支,也就是说 git merge <branch_name> 中 <branch_name> 必须是内容最新的分支。

[root@localhost git]$ cat 1.txt    # 查看文件内容,会自动显示冲突的内容
<<<<<<< HEAD                       # 如下,表示bbb是master分支产生的变更,aaa是dev分支产生的变更
bbb                                
=======
aaa
>>>>>>> dev    
[root@localhost git]$ cat 1.txt    # 如果dev分支下是我想要的,那么我们可以先改成同dev分支里的内容一样,然后提交文件,最后再合并分支
aaa
[root@localhost git]$ git add 1.txt
[root@localhost git]$ git commit -m 'resolve confict' 1.txt
[root@localhost git]$ git merge dev
[root@localhost git]$ cat 1.txt    # 如果master分支下是我想要的,那么我们可以先改成我想要的内容,然后提交
aaa                                # 然后切换到dev分支,把master分支合并到dev分支即可
bbb
[root@localhost git]$ git add 1.txt
[root@localhost git]$ git commit -m 'resolve confict'   # 注意这里需要提交全部,不能只提交一个文件
[root@localhost git]$ git checkout dev
[root@localhost git]$ git merge master


远程分支管理:

git branch                          # 查看本地分支
git ls-remote origin                # 查看远程分支
git push origin <new_branch_name>   # 把本地新建的分支推送到远程

当我们使用 git push 的时候,有两种情况:

(1) 当本地分支和远程分支一致时,git push 会把所有本地分支的变更一同推送到远程
(2) 当本地分支比远程多时,默认只推送本地和远程一致的分支

当我们使用 git clone 的时候,默认只克隆 master 分支下的代码到本地,如果我们想克隆其他分支,操作如下:

[root@localhost git]$ git clone https://github.com/pzk7788/studygit.git    # 先克隆远程的master分支下来
[root@localhost git]$ cd studygit/                                         # 进入克隆的分支代码目录
[root@localhost studygit]$ git checkout -b dev2 origin/dev2                # 克隆远程的新分支,第一个dev2是本地新分支,第二个dev2是远程的分支
# 如果本地存在dev2分支,会自动关联远程分支,如果不存在则会自动在本地创建该分支

 

 

 

 

     

   

posted @ 2019-01-19 15:34  孔雀东南飞  阅读(193)  评论(0编辑  收藏  举报