Git图解:分支管理(二)

这篇具有很好参考价值的文章主要介绍了Git图解:分支管理(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


这是继Git图解:安装与基本操作(一)的第二篇分享,分支管理。
1.分支管理
1.1.基本介绍

Git为我们提供了杀手级的武器之一,分支。通过上一次的博客分享可以知道,我们都是在主分支上操作的,所以说我们操作的都是在一条分支上操作,对应着只有⼀条时间线。

Git图解:分支管理(二),git,github

我们可以使用git log指令添加对应的参数可以查看到:

[xiyan@hecs-34711 git_space]$ git log --graph

我们在master分支上也能直接操作,为什么还要有分支?

首页要遵守一个原则:**master主分支上的代码要求是稳定的!**因为在一个项目中放在线上跑的代码就是master分支中的代码!如果我们在master分支中直接修改代码,很难保证不会出现bug,我们可以创建其他的分支,通过测试之后确定没有致命的bug之后,在通过分支合并也能添加在原有的代码上添加功能,这就是分支带来的好处。

举个例子:

假如你会分身,那么你可以同时学习C++和Java当你合并你的分身,就可以同时拥有C++和Java的两门语言的技术。

Git图解:分支管理(二),git,github

1.2.创建分支

使用git branch 分支名来创建分支:

[xiyan@hecs-34711 git_space]$ git branch      # 查看本机上所有的分支
* master
[xiyan@hecs-34711 git_space]$ git branch dev  # 创建分支
[xiyan@hecs-34711 git_space]$ git branch
  dev
* master

我们创建一个dev分支, 而* 表⽰当前 HEAD 指向的分⽀是 master 分⽀。

[xiyan@hecs-34711 git_space]$ ls .git/refs/heads/
dev  master
[xiyan@hecs-34711 git_space]$ cat .git/refs/heads/*
0c376930fcf814ee8b856bec05588e4cfa9fbd69
0c376930fcf814ee8b856bec05588e4cfa9fbd69
[xiyan@hecs-34711 git_space]$ cat .git/HEAD
ref: refs/heads/master

可以是一张图表示:

Git图解:分支管理(二),git,github

1.3.分支切换

使用git checkout命令:

[xiyan@hecs-34711 git_space]$ git checkout dev
Switched to branch 'dev'
[xiyan@hecs-34711 git_space]$ git branch
* dev
  master
[xiyan@hecs-34711 git_space]$ cat .git/HEAD 
ref: refs/heads/dev

如图:

Git图解:分支管理(二),git,github

1.4.分支合并

我们在dev分支修改write文件的内容,添加一行"updata msg in dev branch!":

[xiyan@hecs-34711 git_space]$ git branch
* dev
  master
[xiyan@hecs-34711 git_space]$ cat write 
绝知此事要躬行!
劝君惜取少年时!
知行合一!
updata msg in dev branch!
[xiyan@hecs-34711 git_space]$ git checkout master
Switched to branch 'master'
[xiyan@hecs-34711 git_space]$ git branch
  dev
* master
[xiyan@hecs-34711 git_space]$ cat write
绝知此事要躬行!
劝君惜取少年时!
知行合一!

可以发现在dev分支上修改的代码在非dev分支,这里就是在master分支下演示,在没有合并的情况下不能查看到内容的修改。

git merge 命令⽤于合并指定分⽀到当前分⽀,我们在master分支上将dev修改的内容合并到master中。

[xiyan@hecs-34711 git_space]$ git branch
  dev
* master
[xiyan@hecs-34711 git_space]$ cat write 
绝知此事要躬行!
劝君惜取少年时!
知行合一!
[xiyan@hecs-34711 git_space]$ git branch
  dev
* master
[xiyan@hecs-34711 git_space]$ git merge dev
Updating 7157a24..1c78662
Fast-forward
 write | 1 +
 1 file changed, 1 insertion(+)
[xiyan@hecs-34711 git_space]$ cat write 
绝知此事要躬行!
劝君惜取少年时!
知行合一!
updata msg in dev branch!

合并后的master指向了,dev提交的版本。

Git图解:分支管理(二),git,github

Fast-forward 代表“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度⾮常快。这样的方式来合并分支不能很好的反映,是哪一个分支提交了代码。

关于非Fast-forward模式在理解分支冲突后更好说明。

1.5.删除分支

合并完成后, dev 分⽀存在就没有什么价值,我们可以将dev分支删除, 我们删除分支是如果当前正处于某分⽀下,就不能删除当前分⽀,如:

[xiyan@hecs-34711 git_space]$ git branch
* dev
  master
[xiyan@hecs-34711 git_space]$ git branch -d dev
error: Cannot delete the branch 'dev' which you are currently on.

我们切换到master分支将dev分支经行删除:

[xiyan@hecs-34711 git_space]$ git checkout master
Switched to branch 'master'
[xiyan@hecs-34711 git_space]$ git branch
  dev
* master
[xiyan@hecs-34711 git_space]$ git branch -d dev
Deleted branch dev (was 1c78662).
[xiyan@hecs-34711 git_space]$ git branch
* master
[xiyan@hecs-34711 git_space]$ cat .git/refs/heads/*
1c78662e550558d9542a2c2befa79d722de58a8f

Git图解:分支管理(二),git,github

因为创建、合并和删除分⽀⾮常快,所以Git⿎励你使⽤分⽀完成某个任务,合并后再删掉分⽀,这和直接在master分⽀上⼯作效果是⼀样的,但过程更安全。

1.6分支冲突

这个地方我新创建了一个dev1然后在dev1上添加内容"write context: I am zhangsan!",然后在合并到master分支上,大家可以在按照上面的内容操作!

[xiyan@hecs-34711 git_space]$ cat write 
绝知此事要躬行!
劝君惜取少年时!
知行合一!
千里之行始于足下!
updata msg in dev branch!
write context: I am zhangsan!

我们分别在master和dev1分支上将zhangsan的名字修改成,lisi,wangwu。

# 在master上修改
[xiyan@hecs-34711 git_space]$ git branch
  dev1
* master
[xiyan@hecs-34711 git_space]$ vim write 
[xiyan@hecs-34711 git_space]$ git add write 
[xiyan@hecs-34711 git_space]$ git commit -m "modify name lisi"
[master 6caa00b] modify name lisi
 1 file changed, 1 insertion(+), 1 deletion(-)
[xiyan@hecs-34711 git_space]$ cat write 
绝知此事要躬行!
劝君惜取少年时!
知行合一!
千里之行始于足下!
updata msg in dev branch!
write context: I am lisi!

# 在dev1上修改
[xiyan@hecs-34711 git_space]$ git branch
* dev1
  master
[xiyan@hecs-34711 git_space]$ vim write 
[xiyan@hecs-34711 git_space]$ git add write 
[xiyan@hecs-34711 git_space]$ git commit -m "modify name wangwu"
[dev1 11ba100] modify name wangwu
 1 file changed, 1 insertion(+), 1 deletion(-)
[xiyan@hecs-34711 git_space]$ cat write 
绝知此事要躬行!
劝君惜取少年时!
知行合一!
千里之行始于足下!
updata msg in dev branch!
write context: I am wangwu!

上面我们修改了相同的内容在不同的分支上,如果我们合并分支,那么就会产生分支冲突的问题。

[xiyan@hecs-34711 git_space]$ git branch
  dev1
* master
[xiyan@hecs-34711 git_space]$ git merge dev1
Auto-merging write
CONFLICT (content): Merge conflict in write
Automatic merge failed; fix conflicts and then commit the result.
[xiyan@hecs-34711 git_space]$ cat write 
绝知此事要躬行!
劝君惜取少年时!
知行合一!
千里之行始于足下!
updata msg in dev branch!
<<<<<<< HEAD
write context: I am lisi!
=======
write context: I am wangwu!
>>>>>>> dev1

上面告诉我们HEAD(当前指向master)分支修改了lisi,dev1修改成了wangwu,产生冲突。我们就需要手动的修改,并重新提交(注意注意注意)!!!

[xiyan@hecs-34711 git_space]$ vim write 
[xiyan@hecs-34711 git_space]$ git add write 
[xiyan@hecs-34711 git_space]$ git commit -m "resolve merge conflict issue"
[master 56ad858] resolve merge conflict issue
[xiyan@hecs-34711 git_space]$ cat write 
绝知此事要躬行!
劝君惜取少年时!
知行合一!
千里之行始于足下!
updata msg in dev branch!
write context: I am lisi!
write context: I am wangwu!

至此我们解决了分支冲突的问题

Git图解:分支管理(二),git,github

上面的状态图就是根据这个画的

[xiyan@hecs-34711 git_space]$ git log --graph --pretty=oneline --abbrev-commit
*   56ad858 resolve merge conflict issue
|\  
| * 11ba100 modify name wangwu
* | 6caa00b modify name lisi
|/  
* 01eae4d write context in dev1
* 1c78662 in dev commit msg
* 7157a24 the write updata
* 0c37693 the first commit write

当然合并完分支之后可以删除分支。

1.7.分支管理策略

1.关于Fast-forward

Git图解:分支管理(二),git,github

我们在没有分支合并的情况下,默认是Fast-forward模式的。我们可以是使用–no-ff来强制禁用Fast-forward,在 merge 时⽣成⼀个新的 commit ,这样,从分⽀历史上就可以看出分⽀信息。

[xiyan@hecs-34711 git_space]$ git branch
* master
[xiyan@hecs-34711 git_space]$ git checkout -b dev2 #创建并切换分支
Switched to a new branch 'dev2'
[xiyan@hecs-34711 git_space]$ git branch
* dev2
  master
[xiyan@hecs-34711 git_space]$ vim write 
[xiyan@hecs-34711 git_space]$ git add .
[xiyan@hecs-34711 git_space]$ git commit -m "write modify"
[dev2 06afc8c] write modify
 1 file changed, 1 insertion(+)
[xiyan@hecs-34711 git_space]$ cat write 
绝知此事要躬行!
劝君惜取少年时!
知行合一!
千里之行始于足下!
updata msg in dev branch!
write context: I am lisi!
write context: I am wangwu!
use --no-ff merge branch!
[xiyan@hecs-34711 git_space]$ git checkout master
Switched to branch 'master'
[xiyan@hecs-34711 git_space]$ git branch
  dev2
* master
[xiyan@hecs-34711 git_space]$ git merge --no-ff -m "merge with --no-ff" dev2
Merge made by the 'recursive' strategy.
 write | 1 +
 1 file changed, 1 insertion(+)
[xiyan@hecs-34711 git_space]$ git log --graph --pretty=oneline
*   9a86419a4c36e6d0957e85888652554452a96d07 merge with --no-ff
|\  
| * 06afc8c5adb965827d538992a6dd845fde23b3b6 write modify
|/  
*   56ad85873d2b592ecac9dfbf19030e2050b403c5 resolve merge conflict issue

确实可以观察到分支修改的变化。

Git图解:分支管理(二),git,github

2.关于很多分支策略

如何在团队开发的过程中,创建了很多分支,如图:

Git图解:分支管理(二),git,github

我们创建分支的目的是为了让master分支保持稳定,但是我们前面的,都是在master上直接合并分支,这样还是不能保证master分支的稳定性,怎么办?

Git图解:分支管理(二),git,github

我们前面都是这样在master分支直接合并,是不好的做法,当参数分支冲突的时候我们手动的修改代码,然后没有经过测试直接就在master分支上,无法很好的保证master分支的稳定性。

更推荐下面的做法:

Git图解:分支管理(二),git,github

3.bug分支

场景:当我们在dev2分支上开发,现在代码开发到一半,现在master分支上有一个bug急需解决,那么我们就需要创建一个fix_bug的分支来修改bug,然后删除fix_bug分支。

那我们在dev2上写的代码还在工作区中,不好提交怎么办?

[xiyan@hecs-34711 git_space]$ vim write 
[xiyan@hecs-34711 git_space]$ cat write 
绝知此事要躬行!
劝君惜取少年时!
知行合一!
千里之行始于足下!
updata msg in dev branch!
write context: I am lisi!
write context: I am wangwu!
user --no-ff merge branch!
coding.......
[xiyan@hecs-34711 git_space]$ git status
# On branch dev2
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   write
#
no changes added to commit (use "git add" and/or "git commit -a")
[xiyan@hecs-34711 git_space]$ git checkout -b fix_bug # 直接创建分支,把工作区的代码也携带了!
M	write
Switched to a new branch 'fix_bug'
[xiyan@hecs-34711 git_space]$ cat write 
绝知此事要躬行!
劝君惜取少年时!
知行合一!
千里之行始于足下!
updata msg in dev branch!
write context: I am lisi!
write context: I am wangwu!
user --no-ff merge branch!
coding.......
[xiyan@hecs-34711 git_space]$ git branch 
  dev2
  fix_bug
* master
[xiyan@hecs-34711 git_space]$ git branch -d fix_bug # 删除
Deleted branch fix_bug (was 9a86419).

我们实验了,工作区的代码携带到了fix_bug分支中,这是我们不像看到的,使用git stash 命令,可以将当前的⼯作区信息进⾏储藏,被储藏的内容可以在将来某个时间恢复出来。

[xiyan@hecs-34711 git_space]$ git branch
* dev2
  master
[xiyan@hecs-34711 git_space]$ git stash
Saved working directory and index state WIP on dev2: 06afc8c write modify
HEAD is now at 06afc8c write modify
[xiyan@hecs-34711 git_space]$ git status
# On branch dev2
nothing to commit, working directory clean
[xiyan@hecs-34711 git_space]$ git checkout master
Switched to branch 'master'
[xiyan@hecs-34711 git_space]$ git branch
  dev2
* master
[xiyan@hecs-34711 git_space]$ git checkout -b fix_bug
Switched to a new branch 'fix_bug'
[xiyan@hecs-34711 git_space]$ git branch
  dev2
* fix_bug
  master
[xiyan@hecs-34711 git_space]$ cat write 
绝知此事要躬行!
劝君惜取少年时!
知行合一!
千里之行始于足下!
updata msg in dev branch!
write context: I am lisi!
write context: I am wangwu!
user --no-ff merge branch!
[xiyan@hecs-34711 git_space]$ cat .git/refs/heads/*
06afc8c5adb965827d538992a6dd845fde23b3b6
9a86419a4c36e6d0957e85888652554452a96d07
9a86419a4c36e6d0957e85888652554452a96d07

我们现在有了一个跟master分支状态一样的版本,我们就可以在fix_bug上修改bug,修改完毕过后,重新提交,然后就可以切换到master分支上经行合并,最好删除fix_bug分支。

这里的操作和前面的一样,如果大家跟着敲到这里,那么问题不大!

我们bug修改后我们来到dev2将⼯作现场恢复

[xiyan@hecs-34711 git_space]$ git checkout dev2
Switched to branch 'dev2'
[xiyan@hecs-34711 git_space]$ git branch
* dev2
  master
[xiyan@hecs-34711 git_space]$ git status
# On branch dev2
nothing to commit, working directory clean
[xiyan@hecs-34711 git_space]$ git stash list # 查看⼯作现场存到哪
stash@{0}: WIP on dev2: 06afc8c write modify
[xiyan@hecs-34711 git_space]$ tree .git
......
└── refs
    ├── heads
    │   ├── dev2
    │   ├── fix_bug
    │   └── master
    ├── stash
    └── tags

如何恢复现场,我们可以使⽤ git stash pop 命令,恢复的同时会把 stash 也删了,⽰例如下:

[xiyan@hecs-34711 git_space]$ git stash pop
# On branch dev2
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   write
#
no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (66a75eb6bda32ca35c47bcdcafb6c77b5016e78f)

我们就又可以正常的开发代码了。

4.强制删除临时分⽀

场景:如果一个项目功能正在开发,突然被项目经理叫停,这个项目这个功能不用再做了,那么我们就要删除临时分支,创建一个dev3来演示一下:

[xiyan@hecs-34711 git_space]$ git branch
  fix_bug
* master
[xiyan@hecs-34711 git_space]$ git checkout -b dev3
M	write
Switched to a new branch 'dev3'
[xiyan@hecs-34711 git_space]$ vim write 
[xiyan@hecs-34711 git_space]$ cat write 
绝知此事要躬行!
劝君惜取少年时!
知行合一!
千里之行始于足下!
updata msg in dev branch!
write context: I am lisi!
write context: I am wangwu!
user --no-ff merge branch!
in dev3 coding.......
[xiyan@hecs-34711 git_space]$ git add write
[xiyan@hecs-34711 git_space]$ git commit -m "modify in dev3"
[dev3 dfc8c5f] modify in dev3
 1 file changed, 1 insertion(+)
[xiyan@hecs-34711 git_space]$ git checkout master 
Switched to branch 'master'
[xiyan@hecs-34711 git_space]$ git branch -d dev3 # 无法删除
error: The branch 'dev3' is not fully merged.
If you are sure you want to delete it, run 'git branch -D dev3'.
[xiyan@hecs-34711 git_space]$ git branch
  dev3
* master
[xiyan@hecs-34711 git_space]$ git branch -D dev3
Deleted branch dev3 (was dfc8c5f).
[xiyan@hecs-34711 git_space]$ git branch
* master

使用-D选项就可以删除已经提交过的但是没有合并的dev3分支。文章来源地址https://www.toymoban.com/news/detail-778824.html

到了这里,关于Git图解:分支管理(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • git分支-分支管理

    现在已经创建、合并和删除了一些分支,让我们来看看一些分支管理工具,在开始经常使用分支时会很有用。 git branch命令不仅仅用于创建和删除分支。如果不带参数运行它,会得到当前分支的简单列表。 $ git branch   iss53 * master   Testing 这个*字符是前缀,表示当前检出的分

    2024年04月10日
    浏览(28)
  • git管理工具学习(图解使用git工作流程)

    git管理工具学习(图解使用git工作流程)

    GIT 简介 git是什么,在维基百科上是这么介绍的: git是一个分布式的版本控制软件 分布式 是相对于集中式而言的,分布式即每一个git库都是一个完整的库。 每个库的地位都是平等的,但是一般在实际开发都需要有一个统一的代码管理平台(服务器)。来简化开发,我们只需

    2024年02月14日
    浏览(13)
  • 【Git企业开发】第四节.Git的分支管理策略和bug分支

    【Git企业开发】第四节.Git的分支管理策略和bug分支

    文章目录 前言 一、Git的分支管理策略       1.1 Fast forward 模式和--no-ff 模式       1.2 企业分支管理策略 二、bug分支 三、删除临时分支 四、总结 总结 通常合并分支时,如果可能,Git 会采用 Fast forward 模式。还记得如果我们采用 Fast forward 模式之后,形成的合并结果是什么

    2024年02月06日
    浏览(15)
  • 【Git】分支管理--创建新分支、删除分支、恢复分支

       1、查看所有分支 2、切换到将要复制的现有分支   sourceBranch 为接下来要复制到新分支的现有分支名。创建的新分支依赖当前所在分支,且新分支一旦创建不能更改依赖,所以要提前切换到希望复制的分支 3、创建新分支   newBranch 为新分支名 4、push内容到新分支  

    2024年02月07日
    浏览(14)
  • 04架构管理之分支管理实践-一种git分支管理最佳实践

    04架构管理之分支管理实践-一种git分支管理最佳实践

            专栏说明:针对于企业的架构管理岗位,分享架构管理岗位的职责,工作内容,指导架构师如何完成架构管理工作,完成架构师到架构管理者的转变。计划以10篇博客阐述清楚架构管理工作,专栏名称:架构管理之道         对于架构管理、研发管理中,分支

    2024年02月11日
    浏览(11)
  • 使用Git Bash拉取github仓库代码(包含分支拉取与切换)

    使用Git Bash拉取github仓库代码(包含分支拉取与切换)

    小白记录一下自己拉取项目的过程 1. 创建一个文件夹,用来存放使用git克隆下来的代码。 2.在此右键打开Git Bash Here。 3.对项目进行克隆,项目地址为github仓库中Code下复制的HTTPS地址。期间可能需要进行身份验证。此时下载了仓库中的master,并创建了本地分支main,且本地分支

    2024年02月16日
    浏览(52)
  • git学习笔记 | 版本管理 - 分支管理

    git学习笔记 | 版本管理 - 分支管理

    学习文章1 学习文章2 学习文章3 Git是开源分布式版本控制系统,版本控制是一种记录文件内容变化,查阅特定版本修订情况的系统。 说法1 说法2 虽然有两种说法,但大概意思是相同的,前三个区域都在本地,只有远程仓库不在本地。 本地仓库 = 工作区 + 版本区 工作区:本地

    2024年02月10日
    浏览(35)
  • 第三节:Git分支管理(关键词:git branch、git checkout、git diff、git merge、查看、创建、切换、对比分支)

    第三节:Git分支管理(关键词:git branch、git checkout、git diff、git merge、查看、创建、切换、对比分支)

    本节涉及Git命令 git branch :列出全部分支 git branch name :创建分支 git checkout name :切换分支 git diff branch1 branch2 :对比两个分支 git diff --quiet branch1 branch2 :对比两个分支是否存在差异,但不显示细节 git diff branch1 branch2 filename :对比两个分支中某个具体文件差异 git merge :合并

    2023年04月08日
    浏览(10)
  • git 分支管理

    git 分支管理

    一. 理解分支 1. master分支  二. 分支的(创建,切换、合并、删除) 1.查看分支  2.创建分支 3. 切换分支  4. 合并分支 5. 删除分支 三. 合并冲突 四. 合并模式 五. bug 分支 六. 强制删除分支 在我们的版本库中式有一个master分支的,但是我们不知道我们的master分支是什么  我们

    2024年02月12日
    浏览(7)
  • Git 代码分支管理

    作者:京东科技 周新智 近日,IoT 研发团队加入了不少新同学,对 git 分支的命名和管理方式有些许的模糊,分支的命名规范以及管理方式对项目的版本发布至关重要,为了解决实际开发过程中版本发布时代码管理混乱、冲突等比较头疼的问题,我们将在文中阐述如何更好的

    2024年02月05日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包