Git入门——分支管理

Git入门——分支管理

前言:分支是干什么的??
设想一下,你和你的朋友同时干一件事情,比如说包饺子,那么你是等着饺子皮擀好了再去拌馅料还是在他开始和面的时候就开始拌呢??当然是前者,这样效率会更高,但是假如说你们只有一个盆,那么总不能都在这一个盆上操作吧,肯定是有一个人找另外的家伙什儿,或者两个人都不用这个,这个用来盛煮熟的饺子。
this is 提高工作效率的分支管理

一、 创建、切换和合并分支

1、创建并切换到分支命令:git checkout -b <branch_name(分支名称)>
在这里插入图片描述相当于如下命令组合:
在这里插入图片描述
git branch branch_name 创建分支
git checkout branch_name切换分支

2、合并某个分支到当前分支上(前提是在当前分支):
git merge <dest_branch_name(目标分支名称)>
假如说我在dev1上加上了一些内容。
在这里插入图片描述
现在跳到matser当中合并刚才的dev1的修改:

在这里插入图片描述

3、删除分支:git branch -d <branch_name>
在这里插入图片描述
4、查看分支:git branch
查看结果:
在这里插入图片描述
5、切换分支:git checkout <branch_name>,刚才上面都写了。

二、解决冲突问题

看我一波操作:
在这里插入图片描述之后回到master再进行操作:
在这里插入图片描述现在是master也修改了,dev也修改了,那么合并的时候会出现什么呢??
在这里插入图片描述提示出现的是矛盾在text.txt当中,并且显示自动合并错误,修复矛盾并且提交结果。

我发现了一个神奇的地方,就是text.txt文件被修改了。
在这里插入图片描述
不相同的地方Git会自动使用好几对<>括起来,但是感觉和txt文件有关,因为git是可以跟踪管理txt文件的,那么我们修改一下master的text.txt。
在这里插入图片描述

三、分支管理策略

现在的提交方式都是使用 git merge <dest_branch_name>进行提交,这样做的缺点是直接把dev分支当中的信息都合并到当前分支,如果删除了dev分支,dev分支的任何信息都消失了,如果想要把dev分支进行的操作记录下来,那么如何操作呢???
其实git merge提交方式采用fast foward模式,想要不采用这种方式进行合并,直接禁止fast foward模式就行。

1、禁止使用fast foward模式进行提交
git merge --no-ff -m "commit_info" branch_name

看我操作:
在这里插入图片描述
2、使用图形的方式查看分支:
git log --graph --pretty=oneline --abbrev-commit
操作结果:
在这里插入图片描述
dev是绿的说明dev分支还存在,删除一下试试:
在这里插入图片描述dev没了,但是dev操作的那个记录存在,假如说以后想要回到这里的操作,直接
git reset到现在的这个状态就行。

四、bug分支处理

又到了发挥想象力的时候了,假如说现在我现在发现了master分支存在一个bug,想要离开现在的dev分支,去处理其他的东西,但是现在dev的东西还没做完,那么应该如何做呢???
正确的是应该保存当前的所有工作,之后再去进行其他操作。

1、那么引入新的操作,保存当前进度。

$ git stash
Saved working directory and index state WIP on dev: ca921c6 bug submit

使用上面的操作,就可以保存现在的所有dev上还没来得及提交的工作。

2、stash 保存文件的恢复
只是保存还不行,如何恢复也是相当重要的一个环节。恢复刚刚保存的进度有两种方式。

(1)git stash pop 恢复

$ git stash pop
On branch dev
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   studentSystem/lssx.pdf

Dropped refs/stash@{0} (097f2383bce9a20479d346a156d4c232035fe5f6)

(2)git stash apply 恢复

$ git stash apply stash@{0}
On branch dev
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   studentSystem/lssx.pdf

$ git stash list
stash@{0}: WIP on dev: ca921c6 bug submit

$ git stash drop stash@{0}
Dropped stash@{0} (79a25f81a26f54ab900d94d8f9eca8e43674861f)

这个操作有一个缺点,那就是在恢复之后,需要手动去删除stash list当中存在的储存记录。也就是git stash drop那一步

3、bug分支处理之后合并矛盾的解决
进行bug分支处理的时候,需要新建一个bug分支,处理bug之后和master分支进行合并,但是这样的话,修改的信息还没同步到dev分支当中,最后合并的时候肯定会出现问题,使用merge拿过来???那么现在的dev进行的那么多工作可就没了呀。其实解决方法也简单,只要把bug分支提交的那次内容拿到当前的dev分支。

首先找到bug分支提交时候的关键码:

$ git commit -m "bug second fixed"
[issue_01 f1fb440] bug second fixed
 1 file changed, 2 insertions(+), 1 deletion(-)

关键码是 f1fb440 ,使用git cherry-pick key_code进行同步操作。

$ git cherry-pick f1fb440
[dev 7829ef4] bug second fixed
 Date: Sat Jan 4 23:00:07 2020 +0800
 1 file changed, 2 insertions(+), 1 deletion(-)

之后再提交就行了。

五、强制删除分支

我现在发现我当前分支做的东西都是无用的,想删除掉的时候弹出了一个问题:
在这里插入图片描述告诉我需要使用命令:git branch -D branch_name才可以强制删除分支,那就听他的呗!
在这里插入图片描述

六、多人合作当中的问题

在团队合作的过程当中,经常用到的分支有四种,但是经常推送的就两种,一个是主要的master分支,一个是工作的dev分支。剩下的bug分支和feature分支基本不需要进行推送。

1、推送分支操作
git remote origin branch_name推送分支
git remote -v查看详细推送分支信息

2、合作当中遇到的问题
在团队合作当中,肯定会遇到这样一个问题,就是你推送一个dev分支上去,你的同事也对这个dev进行修改了,那么他在推送的时候就会出现错误,所以,遇到这种情况应该如何做呢??(且看我一番操作)

假如说现在仓库当中的内容是:
在这里插入图片描述那么同事甲这样做:
在这里插入图片描述
修改了think.txt之后进行了提交,但是之后他又提交了dev分支。如下:
在这里插入图片描述
那么你的同事乙也进行了一些操作:
在这里插入图片描述
创建一个dev,修改think.txt,那么现在他想要推送本地的dev,他就开始了:
在这里插入图片描述
被拒绝了,提醒提交之前先pull,那pull一下试试:
在这里插入图片描述
还是存在问题,提示信息说明对于当前的分支,没有路径信息,后面还给出了一条信息,说是想要设置路径信息为这个分支就执行下面的命令:

git branch --set-upstream-to=origin/<branch> dev

其实这个就是把仓库的dev分支和现在的分支绑定起来的命令。那么现在再git pull一下:
在这里插入图片描述
提示是自动进行了合并,并且标出了矛盾(也就是在原来的文件当中使用多组<>标注出来了)。
在这里插入图片描述
稍微修改一下提交就可以了。
在这里插入图片描述
那么总结一下团队合作当中的使用技巧:
1、首先,创建dev,git push一下,看看能不能推送上去.
2、如果没推送上去,说明远程仓库当中的分支比你先更新,那么需要合并,使用git pull尝试进行合并。
3、解决本地的冲突,再次进行提交
注:当出现no tracking infomation的时候,说明本地的分支和远程仓库当中的分支没建立连接,使用以下命令进行连接:
git branch --set-upstream-to origin/branch_name branch_name

七、Rebase操作

现在甲乙又开始进行合作了,甲开始这样操作:
在这里插入图片描述创建new.txt文件,并且推到分支当中去。

那么乙开始操作了:
在这里插入图片描述他也创建了一个new.txt文件,那么提交的时候肯定出问题,提交一下看看:、在这里插入图片描述真的出问题了,那么git pull一下,并且进行不同的合并。

但是现在出现了一个问题,之前的提交记录都在主线上,但是现在……:
在这里插入图片描述现在在分支上,这样对我们的提交没有影响,但是看上去不好看,所以rebase就起到作用了,先看执行结果:

git rebase
在这里插入图片描述图形查看日志记录(全都移动到了主线上):
在这里插入图片描述

总结:

git checkout -b branch_name 创建并且跳转到该分支
git checkout branch_name 跳转到该分支
git branch branch_name 创建分支
git merge branch_name 合并分支
git branch -d branch_name 删除分支(合并过的)
git branch -d branch_name 删除分支(还未合并的)
git merge --no-ff -m "commit_info" branch_name 禁止使用fast foward模式进行合并
git log --graph --pretty=oneline --abbrev-commit 使用图形的方式查看日志记录
git remote -v 查看远程仓库信息
git remote origin branch_name向远程仓库提交分支
git pull 从远程仓库的分支上拉取信息
git branch --set-upstream-to origin/<branch_name> branch_name 建立远程仓库的分支和本地分支的连接
git rebase 变基

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值