git部署之分支管理,标签管理

由于篇幅过长接着上篇:https://blog.csdn.net/aaaaaab_/article/details/82192344
都是跟着廖雪峰老师的git教程进行学习(需要看的同学直接百度即可),做个学习笔记!

	分支的意义在于你不必要每次完成一点工作进度的时候就得提交,一次性提交又担心数据丢失的问题,分支可以实现你在
做任务的时候提交到自己的分支,然后完成任务时进行分支合并将数据传到主分支即可。
	在Git里,这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,
所以,HEAD指向的就是当前分支。一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向
master,就能确定当前分支,以及当前分支的提交点

在这里插入图片描述
创建与合并分支:

创建分支:

首先,我们创建dev分支,然后切换到dev分支:
mi@ubuntu:~/Desktop/demo$ git checkout -b dev
Switched to a new branch 'dev'
git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
然后,用git branch命令查看当前分支:
mi@ubuntu:~/Desktop/demo$ git branch 
* dev
  master
git branch命令会列出所有分支,当前分支前面会标一个*号。

在这里插入图片描述
进行文件的更改提交:

mi@ubuntu:~/Desktop/demo$ ls
file1.txt  file2.txt  file3.txt  readme.md  readme.txt  test
mi@ubuntu:~/Desktop/demo$ cat readme.txt 
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.

mi@ubuntu:~/Desktop/demo$ echo "Creating a new branch is quick." >> readme.txt 
mi@ubuntu:~/Desktop/demo$ cat readme.txt 
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.

Creating a new branch is quick.
mi@ubuntu:~/Desktop/demo$ git add readme.txt 
mi@ubuntu:~/Desktop/demo$ git commit -m "branch test"
[dev 4b4a010] branch test
 1 file changed, 1 insertion(+)

在这里插入图片描述切换到主分支发现文件并没有更改,因为我们是在dev分支上面进行的操作,在master分支无法查看。

mi@ubuntu:~/Desktop/demo$ git checkout master 
Switched to branch 'master'
mi@ubuntu:~/Desktop/demo$ cat readme.txt 
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.

在这里插入图片描述
合并分支在master分支上面可以查看提交数据:

mi@ubuntu:~/Desktop/demo$ git merge dev 
Updating ccc7a4d..4b4a010
Fast-forward
 readme.txt | 1 +
 1 file changed, 1 insertion(+)
mi@ubuntu:~/Desktop/demo$ cat readme.txt 
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.

Creating a new branch is quick.

在这里插入图片描述删除分支:

mi@ubuntu:~/Desktop/demo$ git branch -d dev 
Deleted branch dev (was 4b4a010).
mi@ubuntu:~/Desktop/demo$ git branch 
* master

在这里插入图片描述
如果在主分支和新建分支同时提交就会出现BUG:
新建分支进行提交数据:

mi@ubuntu:~/Desktop/demo$ git checkout -b feature1
Switched to a new branch 'feature1'
mi@ubuntu:~/Desktop/demo$ git branch 
* feature1
  master
mi@ubuntu:~/Desktop/demo$ vim readme.txt 
mi@ubuntu:~/Desktop/demo$ cat readme.txt 
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.

Creating a new branch is quick AND simple.
mi@ubuntu:~/Desktop/demo$ git add readme.txt 
mi@ubuntu:~/Desktop/demo$ git commit -m "AND simple"
[feature1 673899c] AND simple
 1 file changed, 1 insertion(+), 1 deletion(-)

在这里插入图片描述切换到主分支进行更改数据提交(更改数据不统一)

mi@ubuntu:~/Desktop/demo$ git checkout master 
Switched to branch 'master'
mi@ubuntu:~/Desktop/demo$ vim readme.txt 
mi@ubuntu:~/Desktop/demo$ git add readme.txt 
mi@ubuntu:~/Desktop/demo$ git commit -m "& simple"
[master efb7433] & simple
 1 file changed, 1 insertion(+), 1 deletion(-)

在这里插入图片描述
进行分支合并会出现冲突:

mi@ubuntu:~/Desktop/demo$ git merge feature1 
Auto-merging readme.txt
CONFLICT (content): Merge conflict in readme.txt
Automatic merge failed; fix conflicts and then commit the result.

在这里插入图片描述查看文件会出现不同分支修改内容提示,手动更改文件提交:

mi@ubuntu:~/Desktop/demo$ cat readme.txt 
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.

<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
mi@ubuntu:~/Desktop/demo$ vim vim readme.txt 
2 files to edit
mi@ubuntu:~/Desktop/demo$ vim readme.txt 
mi@ubuntu:~/Desktop/demo$ git add readme.txt 
mi@ubuntu:~/Desktop/demo$ git commit -m "conflict fix"
[master d758c59] conflict fix

在这里插入图片描述可以用git log --graph命令查看分支合并图:

mi@ubuntu:~/Desktop/demo$ git log --graph --pretty=oneline --abbrev-commit
*   d758c59 conflict fix
|\  
| * 673899c AND simple
* | efb7433 & simple
|/  
*   ec7236b conflict fixed
|\  
| * 701d07b AND simple
* | 38f1038 & simple
|/  
* 4b4a010 branch test
* ccc7a4d test
* 80b06b9 add readme.txt
* 3ee6806 add readme.txt
* 6af4dd7 add readme.txt
* 58aa685 add readme.txt
* b2c2c7d add 3 files.
* e66e360 wtrote a readme file
* f177193 add readme.md

在这里插入图片描述删除分支:

mi@ubuntu:~/Desktop/demo$ git branch -d feature1 
Deleted branch feature1 (was 673899c).
mi@ubuntu:~/Desktop/demo$ git branch
* master

在这里插入图片描述

分支管理策略:

通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息看不到之前的分支信息。
如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
下面我们实战一下--no-ff方式的git merge:

创建新的分支更改数据并提交:

mi@ubuntu:~/Desktop/demo$ git checkout -b dev
Switched to a new branch 'dev'
mi@ubuntu:~/Desktop/demo$ git branch 
* dev
  master
mi@ubuntu:~/Desktop/demo$ vim readme.txt 
mi@ubuntu:~/Desktop/demo$ git add readme.txt 
mi@ubuntu:~/Desktop/demo$ git commit -m "add merge"
[dev c9ed0b0] add merge
 1 file changed, 1 deletion(-)

在这里插入图片描述切换分支加入–no-ff参数进行分支合并,-m表示加入解释:

mi@ubuntu:~/Desktop/demo$ git checkout master 
Switched to branch 'master'
mi@ubuntu:~/Desktop/demo$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt | 1 -
 1 file changed, 1 deletion(-)

在这里插入图片描述查看分支合并图:

mi@ubuntu:~/Desktop/demo$ git log --graph --pretty=oneline --abbrev-commit
*   7687817 merge with no-ff
|\  
| * c9ed0b0 add merge
|/  
*   0925bf0 merge with no-ff
|\  
| * 42adf39 add merge
|/  
*   d758c59 conflict fix
|\  
| * 673899c AND simple
* | efb7433 & simple
|/  
*   ec7236b conflict fixed
|\  
| * 701d07b AND simple
* | 38f1038 & simple
|/  
* 4b4a010 branch test
* ccc7a4d test
* 80b06b9 add readme.txt
* 3ee6806 add readme.txt
* 6af4dd7 add readme.txt
* 58aa685 add readme.txt
* b2c2c7d add 3 files.
* e66e360 wtrote a readme file
* f177193 add readme.md

在这里插入图片描述总述:

我们在生产环境中可以新建分支来完成自己的工作,然后合并到master分支即可!
Git分支十分强大,在团队开发中应该充分应用。合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史可以
查看到有分支,能看出来曾经做过合并,而fast forward方式合并就看不出来曾经做过合并。

BUG分支:

软件开发中,bug就像家常便饭一样。有了bug就需要修复,在Git中,由于分支是如此的强大,所以,每个bug都可以通过
一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。当你接到一个修复一个代号101的bug的任务时,很
自然地,你想创建一个分支issue-101来修复它。但是在dev分支上面修改的文件还没有提交:
mi@ubuntu:~/Desktop/demo$ git checkout -b dev
Switched to a new branch 'dev'
mi@ubuntu:~/Desktop/demo$ vim readme.txt 
mi@ubuntu:~/Desktop/demo$ 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功能可以存储现在的工作环境先来处理bug,存储之后工作区是干净的查询不到状态

mi@ubuntu:~/Desktop/demo$ git stash 
Saved working directory and index state WIP on dev: 7687817 merge with no-ff
HEAD is now at 7687817 merge with no-ff
mi@ubuntu:~/Desktop/demo$ git status
On branch dev
nothing to commit, working directory clean

在这里插入图片描述假设在master分支修复BUG,切换到master分支建立修复故障分支更改文件进行提交:

mi@ubuntu:~/Desktop/demo$ git checkout master 
Switched to branch 'master'
mi@ubuntu:~/Desktop/demo$ git checkout -b issue-101
Switched to a new branch 'issue-101'
mi@ubuntu:~/Desktop/demo$ vim readme.txt 
mi@ubuntu:~/Desktop/demo$ cat readme.txt 
Git is a distributed version control system.
Git is a free software distributed under the GPL.
Git has a mutable index called stage.
mi@ubuntu:~/Desktop/demo$ git add readme.txt 
mi@ubuntu:~/Desktop/demo$ git commit -m "fix bug 101"
[issue-101 1644202] fix bug 101
 1 file changed, 1 insertion(+), 1 deletion(-)

在这里插入图片描述修复完成回到master分支进行分支合并:

mi@ubuntu:~/Desktop/demo$ git checkout master 
Switched to branch 'master'
mi@ubuntu:~/Desktop/demo$ git merge --no-ff -m "merge bug fix 101" issue-101 
Merge made by the 'recursive' strategy.
 readme.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

在这里插入图片描述BUG修复完成重新回到dev分支进行工作,但是查看工作区还是干净的:

mi@ubuntu:~/Desktop/demo$ git checkout dev 
Switched to branch 'dev'
mi@ubuntu:~/Desktop/demo$ git status
On branch dev
nothing to commit, working directory clean

在这里插入图片描述

工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了:

mi@ubuntu:~/Desktop/demo$ git stash list 
stash@{0}: WIP on dev: 7687817 merge with no-ff
mi@ubuntu:~/Desktop/demo$ 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} (351750096bf74c302a30d8c2e6f92da564175a17)
mi@ubuntu:~/Desktop/demo$ git stash list  删除之后查询不到任何内容

在这里插入图片描述总述:

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

你想删除新建的dev和故障分支的时候需要先git add然后git commit将之前的修改提交,
才可以切换删除分支:

mi@ubuntu:~/Desktop/demo$ git add readme.txt 
mi@ubuntu:~/Desktop/demo$ git commit -m "add"
[dev d03f87b] add
 1 file changed, 1 deletion(-)
mi@ubuntu:~/Desktop/demo$ git checkout master 
Switched to branch 'master'
mi@ubuntu:~/Desktop/demo$ git branch 
  dev
  issue-101
* master
mi@ubuntu:~/Desktop/demo$ git branch -d dev  这里提示还没有完成合并,加入-D参数可以强制删除分支
或者是其他原因导致不能直接删除
error: The branch 'dev' is not fully merged.
If you are sure you want to delete it, run 'git branch -D dev'.
mi@ubuntu:~/Desktop/demo$ git branch -d issue-101  
Deleted branch issue-101 (was 1644202).
mi@ubuntu:~/Desktop/demo$ git branch -D dev 
Deleted branch dev (was d03f87b).
mi@ubuntu:~/Desktop/demo$ git branch
* master

在这里插入图片描述标签管理:

我们在使用git log命令查看历史的时候会出来一大串commit号不好辨识,打标签是为了方便使用辨识。

创建标签:

mi@ubuntu:~/Desktop/demo$ git branch 
* master
mi@ubuntu:~/Desktop/demo$ git tag v1.0
mi@ubuntu:~/Desktop/demo$ git tag  查看标签
v1.0

在这里插入图片描述
可以找到历史提交的commit id打标签:

mi@ubuntu:~/Desktop/demo$ git log --pretty=oneline --abbrev-commit
3ba476a merge bug fix 101
1644202 fix bug 101
7687817 merge with no-ff
c9ed0b0 add merge
0925bf0 merge with no-ff
42adf39 add merge
d758c59 conflict fix
efb7433 & simple
673899c AND simple
ec7236b conflict fixed
38f1038 & simple
701d07b AND simple
4b4a010 branch test
ccc7a4d test
80b06b9 add readme.txt
3ee6806 add readme.txt
6af4dd7 add readme.txt
58aa685 add readme.txt
b2c2c7d add 3 files.
e66e360 wtrote a readme file
f177193 add readme.md
mi@ubuntu:~/Desktop/demo$ git tag v0.9 1644202   打标签
mi@ubuntu:~/Desktop/demo$ git tag 查看所有标签
v0.9
v1.0

在这里插入图片描述标签是按照字母排序的:可以使用git show查看,还可以加参数:-a 指定版本号,-m指定说明文字

mi@ubuntu:~/Desktop/demo$ git show v0.9 
commit 1644202adad7fa815c0c56e9dc6f1f69d6906ca9
Author: xuefeilong <xuefeilong@xiaomi.com>
Date:   Thu Jan 24 15:18:14 2019 +0800

    fix bug 101

diff --git a/readme.txt b/readme.txt
index cb62dc1..1ab8b4e 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,3 +1,3 @@
 Git is a distributed version control system.
-Git is free software distributed under the GPL.
+Git is a free software distributed under the GPL.
 Git has a mutable index called stage.

在这里插入图片描述操作标签:删除本地标签

mi@ubuntu:~/Desktop/demo$ git tag 
v0.1
v0.9
v1.0
mi@ubuntu:~/Desktop/demo$ git tag -d v0.1 
Deleted tag 'v0.1' (was 468c2ef)
mi@ubuntu:~/Desktop/demo$ git tag 
v0.9
v1.0

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值