Git分支管理

分支管理

git branch

列出所有分支,当前分支前面会标一个*号

$ git branch
* dev
  master

表示有两个分支,当前分支为dev。

git branch命令的-r选项,可以用来查看远程分支,-a选项查看所有分支。

$ git branch -r
MyName/master

$ git branch -a
* master
  remotes/origin/master

上面命令表示,本地仓库的当前分支是master,远程分支是origin/master。

git branch命令的-d选项,用于删除分支(删除分支不能在 被删除分支上 进行)

$ git branch -d test
Deleted branch test (was 64fcede).

git checkout <分支>

切换分支

$ git checkout -b dev origin/master

上面命令表示,在origin/master的基础上,创建一个新分支并切换至新分支。git checkout命令加上-b参数表示创建并切换,即相当于:

$ git branch dev //创建dev分支
$ git checkout dev //切换到dev分支
Switched to branch 'dev'

git merge

合并指定分支到当前分支

$ git merge dev

冲突情况

当为dev进行新的一次提交,切换到master分支,会看到Git还会自动提示我们当前master分支比远程的master分支要超前1个提交。

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'MyName/master' by 1 commit.
  (use "git push" to publish your local commits)

接下来为master分支也进行一次新的提交,然后合并dev分支

$ git merge dev
Auto-merging 新建文本文档.txt
CONFLICT (content): Merge conflict in 新建文本文档.txt
Automatic merge failed; fix conflicts and then commit the result.

可以看到git提示txt文件存在冲突,必须手动解决冲突后再提交。此时查看修改的txt

$ cat 新建文本文档.txt
123
<<<<<<< HEAD
master change
=======
dev change
>>>>>>> dev

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容

接下来对内容进行修改再提交

git add *
$ git commit -m'conflict fixed'
[master a94df7f] conflict fixed

分支合并情况可用带参数的git log查看
image

分支策略

版本库的两条主要分支:Master和Develop。前者用于正式发布,后者用于日常开发。

除了常设分支以外,还有一些临时性分支,用于应对一些特定目的的版本开发。临时性分支主要有三种:

  • 功能(feature)分支
  • 预发布(release)分支
  • 修补bug(fixbug)分支

这三种分支都属于临时性需要,使用完以后,应该删除,使得代码库的常设分支始终只有Master和Develop。

功能分支

第一种是功能分支,它是为了开发某种特定功能,从Develop分支上面分出来的。开发完成后,要再并入Develop,然后删除feature分支。

功能分支的名字,可以采用feature-*的形式命名。

预发布分支

它是指发布正式版本之前(即合并到Master分支之前),我们可能需要有一个预发布的版本进行测试。

预发布分支是从Develop分支上面分出来的,预发布结束以后,必须合并进Master和Develop分支,然后删除预发布分支。它的命名,可以采用release-*的形式。

修补bug分支

软件正式发布以后,难免会出现bug。这时就需要创建一个分支,进行bug修补。

修补bug分支是从Master分支上面分出来的。修补结束以后,再合并进Master和Develop分支,然后删除bug分支。它的命名,可以采用fixbug-*的形式。

bug分支特殊情形

假如有个场景,在工作中,接到个bug修复任务,此时你正在dev进行的工作还没有提交也没办法提交(还未完成),注意,未提交状态下切换分支会将状态合并到切换分支。要想将dev正在进行的工作现场保存起来,就需要使用Git提供的 git stash

$ git stash
Saved working directory and index state WIP on dev: d5dd078 working

查看工作区,可以看到是干净的

$ git status
On branch dev
nothing to commit, working tree clean

接下来,就要确定bug在哪个分支,切换到对应分支并创建临时分支

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'MyName/master' by 11 commits.
  (use "git push" to publish your local commits)

$ git checkout -b bug
Switched to a new branch 'bug'

完成修复bug后,切换到master分支接着完成合并,最后删除bug分支,bug修复工作便彻底结束。

接下来就要回到原本的dev工作了

git checkout dev

之前的保存的工作现场就用git stash list进行查看

$ git stash list
stash@{0}: WIP on dev: d5dd078 working

可以看到现场被保存在某个地方,接下来有两个方法恢复:

一是用git stash apply,恢复后stash内容不删除,要删除的话需要用git stash drop命令

二是用git stash pop,恢复的同时把stash内容删除。

强行删除还未合并的分支

假如你在开发一个新功能,最好新建一个feature分支,

原文地址:https://www.cnblogs.com/y-dt/p/9748513.html