前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >分布式版本控制-Git(二)

分布式版本控制-Git(二)

作者头像
奋飛
发布2019-08-15 16:04:15
3490
发布2019-08-15 16:04:15
举报
文章被收录于专栏:Super 前端

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://ligang.blog.csdn.net/article/details/43309769

七、分支管理

分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。 现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。

HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:

假如我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:

案例: 第一步:创建dev分支,然后切换到dev分支:

代码语言:javascript
复制
$ git checkout -b dev
等价于:$ git branch dev
$ git checkout dev

第二步:查看当前分支:

代码语言:javascript
复制
$ git branch

第三步:在当前dev分支上,编写文件test.txt,并提交到dev分支:

代码语言:javascript
复制
$ git add test.txt

第四步:切换分支到master:

代码语言:javascript
复制
$ git checkout master

此时,在master分支上并不能看到test.txt文件

第五步:把dev分支的工作成果合并到master分支上:

代码语言:javascript
复制
$ git merge dev

第六步:删除dev分支:

代码语言:javascript
复制
$ git branch -d dev

八、解决冲突

第一步:创建新分支,并在此分支上修改test.txt文件,然后提交:

代码语言:javascript
复制
$ git checkout -b feature1

修改test.txt文件

代码语言:javascript
复制
$ git add test.txt -m "change text on feature1"

第二步:切换到master分支,修改test.txt文件,然后提交:

代码语言:javascript
复制
$ git checkout master

修改test.txt文件

代码语言:javascript
复制
$ git add text.txt -m "change text on master"

第三步:将feature1分支合并到master

代码语言:javascript
复制
$ git merge feature1

此时,由于冲突报错了,现需要修改其中一分支下的文件,然后重新提交,合并! 查看分支合并情况:

代码语言:javascript
复制
$ git log --graph --pretty=oneline --abbrev-commit
代码语言:javascript
复制
$ git merge --no-ff -m "merge with no-ff" dev

合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而默认的fast forward合并就看不出来曾经做过合并。

九、BUG分支

当正在dev分支上开发新任务时,测试组给提了一个线上的bug需及时修复,这是就需要在master分支上创建新分支来进行修复,但是开发的现场又需要保存下来! 第一步:查看当前分支信息,当前分支dev上还有未完成待提交的文件,并保存现场:

代码语言:javascript
复制
	$ git status
	$ git stash

第二步:切换到master分支,并创建bug分支,进行bug修复:

代码语言:javascript
复制
	$ git checkout master
	$ git checkout -b issue-bug001
	$ git add text.txt
	$ git commit -m "resolve bug001"

第三步:切换到master分支,合并提交,然后删除临时分支:

代码语言:javascript
复制
        $ git checkout master
	$ git merge --no--ff -m "merge bug001" issue-bug001
	$ git branch -d issue-bug001

第四步:切换到dev分支,恢复现场,继续工作:

代码语言:javascript
复制
	$ git checkout dev
	$ git status
	$ git stash list
	$ git stash apply
	$ git stash drop

恢复现场的两种方式:

代码语言:javascript
复制
1. 恢复现场:$ git stash apply
   删除现场:$ git stash drop
2. 恢复的同时删除:$ git stash pop
代码语言:javascript
复制
恢复指定的stash:$ git stash apply stash@{0}

没有被合并的分支,删除时会报错:

代码语言:javascript
复制
$ git branch -d <name>

使用-D进行强行删除:

代码语言:javascript
复制
$ git branch -D <name>

十、多人协作

1. 当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin

代码语言:javascript
复制
查看远程库的信息:git remote
查看详细远程库信息:git remote -v

2. 推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上

代码语言:javascript
复制
推送master分支:$ git push origin master
推送dev分支:$ git push origin dev

3. 抓取分支,

代码语言:javascript
复制
获取远程分支:$ git clone git@github.com:381510688/learningGit.git
创建远程origin的dev分支到本地:$ git checkout -b dev origin/dev
把dev分支修改的文件push到远程:$ git commit -m "add modify file"
			       $ git push origin dev
如本地没有与远程dev建立连接,需建立连接:
指定本地dev分支与远程origin/dev分支的链接:$ git branch --set-upstream dev origin/dev
把最新的提交从origin/dev抓下来:$ git pull
然后手动修改冲突,合并后再提交

十一、标签管理

Git的标签是版本库的快照,其本质是指向某个commit的指针。 1. 创建标签

代码语言:javascript
复制
切换到需要打标签的分支上:$ git checkout master
打标签:$ git tag v1.0
查看所有标签:$ git tag

2. 在历史的commit id上打标签

代码语言:javascript
复制
查看历史commit id:$ git log --pretty=oneline --abbrev-commit
指定commit id打标签:$ git tag v1.1 6224966
带说明的标签:$ git tag -a v1.2 -m "version 1.2 released" 6224967

3. 查看标签信息:

代码语言:javascript
复制
$ git show v1.1

4. 用PGP签名标签:

代码语言:javascript
复制
git tag -s <tagname> -m "blablabla..."

5. 推送某个标签到远程:

代码语言:javascript
复制
$ git push origin v1.0

推送全部标签到远程:

代码语言:javascript
复制
$ git push origin --tags

6. 删除本地标签:

代码语言:javascript
复制
$ git tag -d v1.2

删除远程标签:

代码语言:javascript
复制
$ git tag -d v1.1
$ gti push origin :refs/tags/v1.1
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年01月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 七、分支管理
  • 八、解决冲突
  • 九、BUG分支
  • 十、多人协作
  • 十一、标签管理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档