Git分支的使用详情教程

综述

本文档主要用于详细说明如何使用Git的分支;主要包含四个方面:

  1. 背景说明
  2. 创建分支
  3. 合并分支
  4. 删除分支

由于之前很早写过一篇分支的使用《Git命令的使用_创建与合并分支——详细教程4》,但是由于CSDN改版,文章的样式,图片都变得面目全非了,所以今天重新整理了一下

背景说明

前言:在我们每次的提交,Git都把它们串成一条时间线,这条时间线就是一个分支。截止到目前,只有一条时间线,在Git里,这个分支叫主分支,即master分支。简单来理解我们可以认为master就是主分支。而HEAD指向的是“当前分支”。

我们在日常工作中可能会遇到这样的需求:

  1. 开发某个项目;
  2. 为了实现某个新的客户需求,创建一个分支;
  3. 在这个分支上开展工作;
  4. 测试无误后将分支合并到主分支中,然后推送到线上分支。

例如我们的线上分支是master分支,然后项目是实现会员登录功能,此时客户提了一个新的需求,需要用户每次登录的时候都赠送给客户一部分积分。这个时候我们就需要:

  1. 创建一个分支;
  2. 在此分支上实现用户登录赠送积分功能;
  3. 测试通过,切回主分支,然后合并这个分支,最后推送到线上分支;
  4. 删除此分支。

新建分支

我们以实际实例进行说明。

1 将线上分支clone下来

先去码云上将我们创建helloGit项目找到将此项目克隆下来

// git clone [项目地址]

git clone git@gitee.com:zhihua_wei/hello-git.git

将线上分支克隆下来

2 进入项目查看文件

进入项目查看文件、代码

// 进入项目文件命令
cd hello-git
// 查看文件命令
ls
// 输出文件内容命令
cat README.md

进入项目查看文件代码

3 创建分支开发登录赠送积分功能

我们已经将代码从线上克隆下来,并且看到“项目中已经实现了登录功能”;下面我们就要实现登录赠送积分了。

3.1 创建分支

从上面图中可以看到,当前我们是处于master分支;下面我们就创建dev分支。

// 创建分支 / 切换到分支dev上
git branch dev
git checkout dev
// 上面两条命令相当于下面一条
// git checkout -b dev

// 查看所有分支
git branch -a 

创建分支

从上图我们可以看出我们已经成功创建了dev分支,并且我们已经切换到了dev这个分支上。

3.2 开发登录赠送积分功能

接下来,我们就可以安心的进行开发了,若干时间之后,我们的代码完成了,然后我们将代码贡献提交到项目中。 具体操作如下图

// 查看当前状态
git status
// 提交到本地仓库
git add .
git commit -m "实现赠送积分功能"

// 提交到远程仓库
git push 

我们在直接使用git push是可能会提示远程没有这个分支,如果你想把dev分支提交到远程的dev分支,需要使用

git push --set-upstream origin dev

这样我们就将代码提交到远程仓库dev分支下了。
提交分支代码

3.3 查看各分支代码

我们可以通过切换到不同的分支,查看不同分支下文件的代码都是什么。

查看分支代码

从图中我们可以看出master分支下还是原先的代码,dev分支下是我们新开发增加功能后的代码。

合并分支

由于我们已经将新增的需求开发测试完毕,现在就需要将分支dev的代码合并到master主分支上。

1 进行合并

首先我们需要先将HEAD切换到指向master分支上,然后将dev分支代码合并到master分支上,最后将代码推送到远程线下。

合并分支

2 合并异常

有时候合并操作不会如此顺利。我们可能建立了多个分支,如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git就没法干净的合并它们,在合并它们的时候就会产生合并冲突,如下图例字。
异常案例

进行合并产生冲突如下图示:
合并冲突

$ git merge dev1
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

此时Git做了合并,但是没有自动地创建一个新的合并提交。Git会暂停下来,等待我们去解决合并产生的冲突。你可以在合并冲突后的任意时刻使用git status命令来查看那些因包含合并冲突而处于未合并(unmerged)状态的文件:

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

You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Unmerged paths:
  (use "git add <file>..." to mark resolution)
        both modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

任何因包含合并冲突而有待解决的文件,都会以未合并状态标识出来。Git会在有冲突的文件中加入标准的冲突解决标记,这样你可以打开这些包含冲突的文件然后手动解决冲突。出现冲突的文件会包含一些特殊区段,看起来像下面图示中这个样子:
冲突文件特点

这表示HEAD所指示的版本(也就是你的 master分支所在的位置,因为你在运行merge 命令的时候已经检出到了这个分支)在这个区段的上半部分(=======的上半部分),而 dev1分支所指示的版本在=======的下半部分。 为了解决冲突,你必须选择使用由=======分割的两部分中的一个,或者你也可以自行合并这些内容。例如,你可以通过把这段内容换成下面的样子来解决冲突删除其中间进行解决。

3 解决冲突

我们可以直接在master分支下修改此文件正常后,进行提交即可。

删除分支

我们新增的需求功能已经开发测试完毕,分支也已经进行了合并,故剩余的分支也就没有什么用处了,所以我们需要将分支进行删除。删除分支不光需要将本地的分支删除,也需要将远程仓库中的分支进行删除,这样这个分支才算是彻底删除。
删除分支

相关命令

# 列出所有本地分支
$ git branch

# 列出所有远程分支
$ git branch -r

# 列出所有本地分支和远程分支
$ git branch -a

# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]

# 新建一个分支,并切换到该分支
$ git checkout -b [branch]

# 新建一个分支,指向指定commit
$ git branch [branch] [commit]

# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]

# 切换到指定分支,并更新工作区
$ git checkout [branch-name]

# 切换到上一个分支
$ git checkout -
 
# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]

# 合并指定分支到当前分支
$ git merge [branch]

# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]

# 删除分支
$ git branch -d [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]

# 更新远程分支列表
git remote update origin --prune

参考文档

Git相关文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值