分支的作用
开发新功能或者修复bug时一般会用到分支,既不影响别人的工作,也能让自己的工作实现小步提交,还能保证主分支clean。
分支相关的操作
创建与合并分支
查看当前分支 git branch
git branch
命令会列出所有分支,当前分支前面会标一个*
号。
创建分支 git branch <name>
切换到master
分支:git checkout master
<name>
是分支的名字
切换分支 git checkout <name>
创建并切换分支 git checkout -b <name>
git checkout
命令加上-b
参数表示创建并切换,相当于以下两条命令:
git branch dev
git checkout dev
创建远程分支:git push --set-upstream origin <name>
(这条命令不用记,git push就行,git会提示你push到远程需要的命令)
合并分支到当前分支 git merge <name>
git merge
命令用于合并指定分支到当前分支。
将dev
分支合并到master
分支(注意此处要先切换到master
分支):git merge dev
删除分支 git branch -d <name>
删除dev
分支git branch -d dev
删除后最好再查看一下分支 git branch
删除远程分支git push origin --delete <name>
修改分支名称
本地,需要修改名称的分支不是当前分支:
git branch -m oldName newName
如果是当前分支改名字:
git branch -m newName
远程分支重命名
如果修改远程分支,只需要将本地分支重命名为新分支名称,然后删除远程分支,再把本地分支上传就可以了
查看分支合并图 git log --graph
bug分支
可能会遇到这种情况:正在dev分支上开发,工作进行到一半也没办法push,此刻需要修改一处bug,如何解决?
Git还提供了一个stash
功能,可以把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
git stash
之后再用git status
查看工作区,就是clean的(除非有 没有被git管理的文件),此刻就可以创建新的分支来修复bug.
首先要确定需要在哪个分支上修复bug. 假定需要在master分支上修复bug,就在master分支上创建临时分支:
git checkout master
git checkout -b issue-01
修复bug后,提交修改,(这里的提交只是commit,不是push)换回master分支,完成合并,删除issue-01分支:
git merge --no-ff -m "merged bug fix 101" issue-01
完成!是时候回到dev分支继续干活了:git checkout dev
此时看一下工作区仍然是clean:git status
用git stash list
命令看一下:
git stash list
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
- 用
git stash apply
恢复,但是恢复后,stash内容并不删除,你需要用git stash drop
来删除; - 用
git stash pop
,恢复的同时把stash内容也删了
恢复后再用git stash list
查看,就看不到任何stash内容了.
你可以多次stash,恢复的时候,先用git stash list
查看,然后恢复指定的stash,用命令:
git stash apply stash@{0}
清空stash中的内容:git stash clear
多人协作
推送分支git push origin <name>
- 推送到主分支:
git push origin master
- 推送到其他分支,例如
dev
分支:git push origin dev
假如现在要在dev
分支上开发,就必须创建远程origin
的dev
分支到本地,于是用这个命令创建本地dev
分支:
git checkout -b dev origin/dev
创建后就可以时不时的把dev分支push到远程。
如果遇到push失败,有冲突的话,先git pull
.(但是讲道理,我觉得多人协作情况下,每次push之前应该先pull,解决完冲突再push)
如果git pull
失败了,可能原因是没有指定本地dev分支与远程origin/dev分支的链接(一般都会有提示),根据提示,设置dev和origin/dev的链接:
git branch --set-upstream-to=origin/dev dev
之后再git pull
,然后再push.
查看远程库信息:git remote -v
References:
[1] 廖雪峰:分支管理