本文命令:
配置显示颜色是: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文件中
本文参考:廖雪峰老师官方博客