Linux下git操作(三)——分支管理与标签

本文命令:

配置显示颜色是:git config --global color.ui true

给命令设置别名:git config --global alias.co checkout

查看远程仓库:git remote -v

创建远程仓库分支:git checkout -b dev origin/dev

创建分支:git branch <name>

查看分支:git branch

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

查看分支合并图 :git log --graph

---
暂存现在的工作 :git stash

列出stash : git stash list

恢复后不删除stash中内容: git stash apply

恢复后删除stash中内容: git stash pop     

---
禁用Fast forward模式的合并:git merge --no-ff -m "merge with no-ff" dev

一、分支:

  有了分支,我们就可以创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的主分支(master)上,这样,既安全,又不影响别人工作。

1、创建分支:

$ git checkout -b dev
Switched to a new branch ‘dev’

然后可以查看自己新创建的分支:
$ git branch

创建分之后,dev会获得master主分支当前版本的所有内容。

这里写图片描述
* 表示当前所在分支,master是主分支。


2、切换、合并分支:

现在,我在dev分支中创建了一个文件abc,并且提交到了本地仓库dev分支上,在合并之前,该文件只会在dev分支中,不会提交的master中,相当于master是用来发布版本的,每个分支是用户工作的目录 。

git checkout dev :切换到dev分支

这里写图片描述

$ git merge dev :将dev分支合并到当前(所在的分支为主目录分支)

合并以后主目录就会接收到dev对文件所目录的修改,在master目录下就能找到abc文件了。


3、删除分支:

$ git branch -d dev :删除dev分支

上面-d参数只能删除合并以后的分支,如果该分支未合并,则需要用-D强制删除:
$ git branch -D dev :强行删除未合并的分支


4、解决冲突:

  假设你对文件做了修改,而且master也对文件做了修改。你切换到master下的时候,它还会提醒你比master多了几次提交:

Your branch is ahead of ‘origin/master’ by n commit.

然后你开始合并,因为你们对文件都做了不同修改,所以提交的时候会产生冲突。那么,就需要我们手动解决。
合并的时候

此时查看hello,我们会发现:
这里写图片描述

Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容。

<<<<<<<标记冲突开始,后面跟的是当前分支中的内容。

  HEAD指向当前分支末梢的提交。

  =======之后,>>>>>>>之前是要merge过来的另一条分支上的代码。

  >>>>>>>之后的dev是该分支的名字。

  对于简单的合并,手工编辑,然后去掉这些标记,最后像往常的提交一样先add再commit即可。

如果冲突太复杂,需要用图形化界面:
git mergetool

git log --graph:查看分支合并图。


5、分支管理策略:

合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息,用–no-ff来禁用这种模式。

git merge --no-ff -m "merge with no-ff" dev


6、bug分支:

当你工作到一半的时候,有一个bug急需要解决,但是你手头的工作还没做完,但你又还不想提交,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:

$ git stash       //暂存现在的工作
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge

$ git status      //工作区是干净的
# On branch dev
nothing to commit (working directory clean)

首先确定要在哪个分支上修复bug,假定需要在master分支上修复,就从master创建临时分支:

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 6 commits.

$ git checkout -b issue-101     //建立临时分支来修改bug
Switched to a new branch 'issue-101'

修改bug完后,可以继续刚才的工作了。用git stash list列出

$ git stash list
stash@{0}: WIP on dev: 6224937 add merge

恢复工作的方式:
git stash apply:恢复后不删除stash中内容
git stash pop : 恢复后删除stash中内容

当然,我们也可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令:
$ git stash apply stash@{0}


二、标签管理:

svn在版本回退上要比git方便,git版本回退这么麻烦,我们当然得想办法解决,于是出现了标签。

1、创建标签:

首先到需要创建标签的分支下,创建标签后该标签默认表示的就是当前版本。
git tag v1.0 :创建标签

git tag : 查看标签

对之前的提交打标签:

  • 查看历史提交ID号: git log --pretty=oneline --abbrev-commit (可以直接写成git log)

  • 比方说要对string func这次提交打标签,它对应的commit id是241bc49,敲入命令:$ git tag v0.9 6224937

这里写图片描述

创建带有说明的标签,用-a指定标签名,-m指定说明文字:
$ git tag -a v0.1 -m "version 0.1 released" 3628164


2、操作标签:

$ git tag -d v0.1:删除标签
$ git push origin v1.0 :将内容推送到远程
$ git push origin --tags :一次性推送全部尚未推送到远程的本地标签:

如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:

$ git tag -d v0.9
Deleted tag 'v0.9' (was 6224937)

然后,从远程删除。删除命令也是push,但是格式如下:

$ git push origin :refs/tags/v0.9

git reset --hard v0.2 : 回退到v0.2的版本


3、配置别名:

git config --global color.ui true:配置显示颜色

因为像checkout这样的单词太长了,所以我们要配置别名。

把checkout设置别名co,commit设置为ci:

git config --global alias.co checkout
git config --global alias.ci commit    

–global是全局变量,对整台电脑都适用。以后我就只需要写git co就可以了 ,不用写checkout。

每个仓库的Git配置文件都放在.git/config文件中


本文参考:廖雪峰老师官方博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值