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日
    浏览(76)
  • git管理工具学习(图解使用git工作流程)

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

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

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

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

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

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

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

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

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

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

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

    2024年02月10日
    浏览(37)
  • 第三节: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日
    浏览(34)
  • Git 代码分支管理

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

    2024年02月05日
    浏览(66)
  • git 工具使用--分支管理

    分支管理是Git的杀手级功能之一。分支:就是科幻中的平行宇宙,当你正在电脑面前学习C++的时候,另一个你正在另外一个平行宇宙里面学习Java。如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平时宇宙合并了,结果,你既学习了C++,也学

    2024年02月16日
    浏览(37)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包