您的位置:首页 > 运维架构 > Linux

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

2017-08-03 16:22 357 查看

本文命令:

配置显示颜色是: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文件中

本文参考:廖雪峰老师官方博客
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息