远程仓库
将本地仓库添加到远程仓库
git remote add origin git@github.com:michaelliao/learngit.git
把本地库的所有内容推送到远程库上
git push -u origin master
创建与合并分支
创建分支
git branch dev
切换分支
git checkout dev
合并分支
git merge dev
(Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息)
删除分支
git branch -d dev
查看分支
git branch
分支管理策略
git merge --no-ff -m "merge with no-ff" dev
合并dev分支,请注意--no-ff参数,表示禁用Fast forward
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去
查看分支历史
可以看出分支结果图
git log --graph --pretty=oneline --abbrev-commit
* 614c081 confict fixed
|\
| * 133adef and simple
* | 0e83e20 too simple
|/
* 85d5519 dev init
* 9001e88 test6-3
* d5574ca test6-2
* ca195aa test6-1
* 94f3e62 test5
* 608bb65 test5
* 2161feb test4
* 58ff738 test3
* 07e3e41 test2
* 5be1a0f test
* f168f13 全部提交
* 8f08296 增加描述
* e2de08b 测试初始提交
分支策略
在实际开发中,我们应该按照几个基本原则进行分支管理:
首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
所以,团队合作的分支看起来就像这样:
小结
Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
Bug分支
当我们正在dev分支上开发的时候,有bug需要在master分支上修复时,就需要切换到master分支然后在创建bug修复分支 然而此时还有代码还不能提交到dev分支上,Git还提供了一个stash功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作
#储藏未提交的代码
git stash
#切换分支到master,创建分支,切换分支
git checkout master
git branch issue-101
git checkout issue-101
#代码修改完成后再次提交代码
git add readme.txt
git commit -m "fix bug 101"
#切换分支到master,合并分支代码到master
git checkout master
git merge --no-ff -m "merged bug fix 101" issue-101
#删除分支
git branch -d issue-101
#再次切换分支
git checkout dev
git status
#查看储藏区,恢复储藏区并删除
git stash list
git stash pop
git stash list
恢复储藏区还有一种方式是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
恢复制定的储藏区
git stash apply stash@{0}
多人协作
-
查看远程库信息,使用git remote -v;
-
本地新建的分支如果不推送到远程,对其他人就是不可见的;
-
从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
-
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
-
建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
-
从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
创建标签
敲命令git tag
用命令git tag查看所有标签
查看提交点
git log --pretty=oneline --abbrev-commit
创建标签在某个提交点上
git tag v0.9 f168f13
用git show
可以创建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -a v0.1 -m "version 0.1 released" e2de08b
操作标签
命令git push origin
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d
命令git push origin :refs/tags/
配置别名
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"