Git 分支管理

快速合并

查看分支
使用命令git branch

$ git branch 
* master

可以看到目前就一个分支master

目前分支状态
在这里插入图片描述
创建分支

使用命令git branch < name>

$ git branch dev
$ git branch
  dev
* master

现在已经创建一个dev的分支

切换分支
使用命令 git checkout < name>

$ git checkout dev
Switched to branch 'dev'
$ git branch
* dev
  master
  
现在已经切换到了分支dev

创建和切换分支
使用 git checkout -b < name>代替上方俩个命令

$ git checkout -b feature
Switched to a new branch 'feature'
$ git branch
  dev
* feature
  master

已经创建并且切换到了feature分支

目前的分支状态
在这里插入图片描述
删除分支
使用命令git branch -d < name>

$ git branch -d feature
Deleted branch feature (was 0117de3).
$ git branch
  dev
* master

合并分支
使用命令 git merge < name>

  • 首先我们先在dev分支开发
在readme.txt 修改信息,然后提交

$git add readme.txt 
$ git commit -m "在dev提交"
  • 然后切换回master分支
$ git checkout master
Switched to branch 'master'
$ git log
commit 0117de39dac95b9b2a5a32155d193f1b21dcb304 (HEAD -> master)
Author: renxiaohui <v_renxiaohui01@baidu.com>
Date:   Mon Jul 22 14:25:18 2019 +0800

    第五次提交

发现最新的一次提交没有了,因为之前提交是在dev上,master上的提交没有改变
在这里插入图片描述
现在把dev的提交合并到master

$ git merge dev
Updating 0117de3..33505cb
Fast-forward
 readme.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
 
$ git log
commit 33505cb3405e9a220b424cbf340de64f59e10b19 (HEAD -> master, dev)
Author: renxiaohui <v_renxiaohui01@baidu.com>
Date:   Mon Jul 22 15:32:07 2019 +0800

    在dev提交

注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。但并不不是每次合并都是“快进模式”

目前的分支状态
在这里插入图片描述
现在已经合并了dev分支内容,就可以把dev分支删除了

$ git branch -d dev
Deleted branch dev (was 33505cb).

$ git branch
* master

目前的分支状态
在这里插入图片描述
强制删除

如果要丢弃一个没有被合并过的分支,可以通过 git branch -D < name> 强行删除。

解决冲突合并

  • 新建一个feature1分支
  • 现在,我们先在feature1分支修改readme.txt最后一行,提交
  • 然后切换回master分支,也修改readme.txt最后一行,提交

现在matser和feature1分支都有了自己的提交,变成了这样
在这里插入图片描述
这种情况下就无法快速合并,需要把各自的修改合并起来,解决冲突才行

$ git merge feature1

Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

readme.txt中的合并冲突
自动合并失败;修复冲突,然后提交结果。

git 告诉我们readme.txt有合并冲突,需要我们手动解决冲突后在合并,git status 可以告诉我们那个文件冲突

$ git status

On branch master
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.txt

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

我们可以直接查看readme.txt 内容

111
222
333
444
555
777
<<<<<<< HEAD
999
=======
888
>>>>>>> feature1

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们修改如下后保存:

111
222
333
444
555
777
888
999

修改完之后我们再次提交

$ git add .
$ git commit -m "合并后提交"
[master 5814fa7] 合并后提交

现在master 和feature1 变成了下面
在这里插入图片描述
可以用 git log --graph看分支合并图

$ git log --graph --pretty=oneline --abbrev-commit

*   5814fa7 (HEAD -> master) 合并后提交
|\  
| * 2addbfa (feature1) feature1 888
* | f17ed1c matser 999
|/  
* 5f5d4d6 在frature上777
* ea6a8d4 master 修改 666
*   d8dd0ea 11
|\  
| * ddfb352 dev提交666
* | 08652ba 在master提交555
|/  
* 33505cb 在dev提交
* 0117de3 第五次提交
* 3daba5e 第四次提交
* 28b95a0 第三次提交
* 0542214 第二次提交
* cc7af9d 第一次提交

隐藏工作现场

假如你现在在dev 分支工作,突然有一个bug需要修复,需要在master创建一个新的bug分支进行修复,但是dev还有工作还没有提交

$ git status

On branch dev
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:   readme.txt

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

不是不想提交,而是工作未完成不能提交,那现在怎么办?

幸好,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作

$git stash
Saved working directory and index state WIP on dev: 5814fa7 合并后提交

现在查看工作区就是干净的

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

这个时候你就可以切换到master 创建bug分支,解决bug了,解决完bug之后,就可以切换回dev分支继续开发

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

目前dev的工作区还是干净的,但是需要恢复一下,有两个办法:

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了

$ git stash pop
On branch dev
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:   readme.txt

no changes added to commit (use "git add" and/or "git commit -a")
Dropped refs/stash@{0} (a1e07b9394cf75cdaf09d4a556a7da1f0541cbbf)

再用git stash list查看,就看不到任何stash内容了:

$ git stash list
你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:

$ git stash apply stash@{0}

参考:https://www.liaoxuefeng.com/wiki/896043488029600

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值