git 分支操作

心不动则不痛 提交于 2020-01-14 20:02:08

首先需要了解分支的本质,分支可以理解为一个指向某个commit对象的指针,但是它是可变的,随着commit提交的变化,指针跟随移动,始终指向当前分支最新的那个提交。使用 git log --oneline 命令可以查看每个分支指向的提交信息。git中的分支信息都保存在.git目录下,具体位置参考git目录介绍

 

1. 新建分支

git branch newBr

新建名为newBr的分支,如果分支已经存在,代码会报错

git branch -f newBr

强行创建名为newBr的分支,原来的同名分支会被新建分支覆盖

特别说明:上述方式新建分之后,并不能自动切换到新分支

checkout -b newBr

新建分支的同时切换分支,如果分支已经存在,代码会报错

checkout -B newBr

强行创建,原来的同名分支会被新建分支覆盖

上述4种方式都是基于当前分支进行创建新分支

git branch newBr commitId

基于某次提交创建新分支,其中commitId是该提交对象的id,可以是前几位缩写。前4种语法都可以适用该语法。

git stash branch newBr stashIndex

git基于指定stash储藏创建分支

git stash branch newBr stash@{0} 或者 git stash branch newBr 0 表示基于序号为0的stash创建分支(参考git stash用法)

 

2. 分支切换

git checkout branchName

注意:切换分支并不会改变当前工作区和暂存区

 

3. 查看所有分支 (当前分支会高亮显示)

git branch

 

4. 分支重命名 (不推荐)

git branch -m oldName newName

 

5. 删除分支 (可一次性删除多个)

git branch -d branchOne branchTwo

注意:不能在当前分支删除当前分支,同时分支上如果还未合并,会提示无法删除,这时需要强制删除 git branch -D newBr

 

6. 分支恢复

每个分支就像一个指针指向某个commit对象,只要记住该对象对应的sha-1键值,使用该提交重新创建分支即可。

PS:如果不清楚该sha-1id,也可以通过reflog命令查看

 

7. 分支合并

git merge  dev

表示将dev分支上的内容合并到当前分支,此操作在未发生冲突时会自动生成提交对象并进行提交。

假若发生冲突,git 只做合并操作,并未进行提交。同时会生成冲突文件,通过 git status 命令可查看未合并的冲突文件提示

比如,a.txt 文本中内容分别为aaaa 和 bbbb,此时就需要我们手动解决冲突

修改好后,需要手动再次 add 该文件并再次 commit

如果想将dev上的代码合并到master,可参考以下简洁用法

    git checkout dev             # 检出dev
    git pull                     # 从远端拉取dev上的最新代码
    git checkout master #        # 检出master 
    git merge dev                # 合并dev到master
    git push -u origin master    # 推送到远端master

更高级的用法暂不深究。

 

附:Git开发流程标准中的分支划分,参考文章http://www.softwhy.com/article-8651-1.html

一.分支种类:

当在实际应用开发中,特别是比较复杂的项目,Git不可能只存在一个分支。

比如主分支存放当前线上稳定版代码,还有正在进行测试的非稳定版本分支,或者还有正在开发新功能的分支。

开发建议Git有如下分支(不是影响固定,仅供参考):

(1).master。

(2).develop。

(3).hotfix。

(4).release。

(5).feature。

图示如下:

a:3:{s:3:\"pic\";s:43:\"portal/201808/04/001249htotjm4kb8bacj4s.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

二.分支种类作用介绍:

1.master分支:

此分支通常用来存放项目的稳定版本,主要特点如下:

(1).内容来源主要是分支合并过来,不推荐开发者直接commit提交。

(2).由于master分支可以是稳定版本,可以随时上线,所以通常版本标签都是打在master分支各个提交之上。

关于标签的用法可以参阅Git tag标签用法详解一章节。

2.develop分支:

develop开发分支通常和feature特征分支配合使用,它是所有feature特征分支的基础。

当在feature分支中测试完新开发的功能后,可以将其合并到develop分支。

3.hotfix分支:

当出现紧急问题,比如master线上分支出现代码问题,可以在此分支中进行修补,修补之后然后再合并到master分支。

特别说明:在合并到master主分支的同事,还要合并一份到develop分支,否则之后将develop合并到master时候,可能会导致修复的问题复现。

4.release分支:

当develop分支开发到自认为足够稳定的状态,将此分支合并到release分支(在此分支进行上线前的最后测试)。

最后测试完成后,再合并到master分支和develop分支。

合并到master分支是非常好理解的,因为要上线运行。合并到develop是因为release分支后续可能还会发现问题,所以要将与develop分支同步,以防止以后develop再合并到release分支出现问题。

5.feature分支:

此分支作用其在介绍develop分支的时候已经涉及,在feature进行新功能的开发,开发完成后再合并到develop。

 

 

 

 

 

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!