新建分支
本地项目下 命令行用 git branch
新建一个分支
$ git branch learn-branch
本地分支切换
之前我们已经在本地创建好了分支,接下来切换到 “learn-branch” 分支:
$ git checkout learn-branch
Switched to branch 'learn-branch'
git checkout
下面这句话告诉我们,我们已经成功地将工作分支切换到了 “learn-branch” 分支。当然客户端、web端也可以进行切换
合并分支
快进式合并 ( Fast-forward )
切换到“learn-branch”分支创建个文件 “learn-branch.txt” ,我们将 “learn-branch.txt” 加入到跟踪文件,并提交到本地仓库:直接把master
指向dev
的当前提交
$git add learn-branch.txt
$git commit -m "add learn-branch.txt"
接下来我们回到 “master” 分支,并将 “learn-branch” 分支合并进来:
$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
$ git merge learn-branch
Updating ca62ea0..fce6c4e
Fast-forward
learn-branch.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 learn-branch.txt
git merge [分支名]
命令将指定分支合并到当前工作分支中。请注意,合并时出现了 “Fast forward” 的提示。由于当前 “master” 分支所在的提交对象是要并入的 learn-branch 分支的直接上游,Git 只需把 master 分支指针直接右移。换句话说,如果顺着一个分支走下去可以到达另一个分支的话,那么 Git 在合并两者时,只会简单地把指针右移,因为这种单线的历史分支不存在任何需要解决的分歧,所以这种合并过程可以称为快进(Fast forward).
合并之后,”master” 分支和 “learn-branch” 分支实际上是指向同一个位置。此时你可以通过
$git branch -d [分支名]
来删除某个分支。加上--no-ff参数就可以用普通模式合并,合并后的历史有分支能看出来曾经做过合并.
普通分支合并
分支合并之前,最好使用 git pull 将 “master” 分支的代码更新到最新:
如果我们在合并之前对 “master” 分支和 “learn-branch” 分支都做了一些修改,那合并时就不会像快进合并那么简单了。
git merge learn-branch
手动处理了冲突,再提交
git add file
git commit -m ".."
分支推送到仓库
当你想和其他人分享某个本地分支时,你需要把它推送到一个你拥有写权限的远程仓库。你创建的本地分支不会因为你的写入操作而被自动同步到你引入的远程服务器上,你需要明确地执行推送分支的操作。即 对于无意分享的分支,你尽管保留为私人分支好了,而只推送那些协同工作要用到的特性分支。
我们可以使用 git push [仓库名] [分支名]
,该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:
$ git push origin master
如果要推送其他分支,比如learn-branch
,就改成:
$ git push origin dev
Git还提供了一个stash
功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
$ git stash
用git stash lish
命令检查工作现场
恢复有两个办法:
git stash apply
恢复,但是stash 内容不删除,需要git stash drop
删除。
要想恢复的同时,把stash 内容也删了:
git stash pop
创建标签
切换到需要的分支,然后用命令git tag <name>
就可以打一个新标签
$ git branch
* dev
master
$ git checkout master
$ git tag V1.0
//查看
$ git tag
V1.0
默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,比如,现在已经是周五了,但应该在周一打的标签没有打,怎么办?方法是找到历史提交的commit id,然后打上就可以了:
比方说要对add merge这次提交打标签,它对应的commit id是6224937
,敲入命令:
$ git tag v0.9 6224937`
标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>
查看标签信息:
git show v0.9
可以创建带有说明的标签,用-a
指定标签名,-m
指定说明文字:
$ git tag -a v0.1 -m "version 0.1 released" 3628164
操作标签
删除标签
git tag -d v0.1
如果要推送某个标签到远程,使用命令git push origin <tagname>
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