在公司进行项目开发,每一个项目组多人,每每会共用同一个Github仓库地址。在合并分支的时候,有不少状况是出错的,没法合并。git
分支简介app
分支建立ide
快速合并分支spa
删除分支3d
分支合并冲突指针
普通合并分支code
分支管理策略orm
团队多人协做开发对象
推送分支blog
抓取分支
master分支并非一个特殊的分支,只是主分支的默认名字,在你进行git init
的时候,就会生成master这个名字,全部的记录都会在隐藏的文件夹.git/
下
master的名字能够修改。
建立分支执行如下命令:git branch newBranchName
,Enter.
建立的分支,是为当前提交的对象上建立一个指针。
如图,分支是当前提交对象的指针。Git是经过HEAD的指针,获取当前的分支名字。HEAD是一个指向所在的本地分支。git branch
命令仅仅建立一个分支,并不会自动切换到新的分支去,指针并不会发生移动。
你可使用git log --online --decorate
来查看当前所致的对象
示例
git log --online --decorate
f30ab(HEAD,master,newBranchName)add xxxxxx...balabala...
balabala。。。
git checkout newBranchName
,这样HEAD就指向newBranchName分支了
建立分支而且切换分支的命令的是:git checkout -b newBranchName
这样有什么优势呢??
HEAD分支随着新的提交的操做向时间线后移动,可是master分支却没有移动,仍然是上个版本的提交的对象。
如今咱们切换master分支看看:git checkout master
这个命令作了两件事情
使得HEAD从新指向master分支
将目录恢复成master分支所指向快照的内容
这就说明了,忽略了testing分支所作的修改,以便向另外一个方向进行开发。
可使用git branch
,查看当前分支,带 *
的是当前分支。
在切换分支的时候,必定要注意开发者开发目录的文件会发生改变,若是是切换到一个较旧的分支,工做目录会恢复到该目录最后提交的样子。
若是咱们在testing分支完成工做了,怎么讲testing分支的开发内容合并到maser上面呢? 由于指针的存在,就直接把master指向test当前的提交。就完成了合并。这里须要git merge
命令
git merge testing
命令用于合并指定分支
到当前分支
,合并后,在查看内容。至此完成合并。
合并完成分支以后,就可删除。
使用命令进行操做git branch -d testing
在合并分支的时候,会出现内容冲突,合并出错不成功的现象。
建立并使用新的分支进行开发:git checkout -b dev
修改README.md文件的内容,在dev
分支上提交
git checkout master
Switch to branch master
Your branch is up-to-date with origin/master
Git会自动提示咱们当前master分支比远程分支要超前1个提交,在master分支上把README.md文件的最后要修改,提交。 如今,master分支和dev分支都分别有新的提交,变成了这样。
这样状况下,Git没法进行快速合并,只能把各自修改的合并起来。可是这种合并可能会有冲突。
git merge dev
,回车。 若是文件冲突,会报错,会提示:Automatic merge failed;fix conficts and then commit the result
冲突之后必需要手动解决冲突后再提交。使用git status
命令
Git用<<<<<<< , ======= ,>>>>>>>
标记不一样分支的内容,咱们修改后保存提交。这样,master和dev的分支以下:
合并分支的时候,Git可能会用Fast forward 模式,可是这种的模式下,删除分支后,会丢掉分支信息。
若是要强制禁用Fast forward模式,Git就会在merge是生成一个新的commit,这样,从分支历史上就能够看到分支信息。
git merge
首先,建立并切换分支:git checkout -n dev
修改提交的文件,并从新提交
切换回master,git checkout master
,流程图以下:
准备合并分支的时候,请注意参数--no-ff
参数,表示禁用Fasr forword
git merge --no-ff -m "merge with no-ff"
合并后,用如下语句查看分支历史
git log --graph --pretty=online --abbrev-commit
不使用Fast forward模式,merge就像是这样:
公司开发通常须要三个分支:
master
主分支用来发布
dev
平常开发
bug
用来修改bug用的分支
推送到其余分支:git push origin dev
通常多人协做的模式通常是这样
首选,能够尝试用git push origin branch-name
推送本身修改。
若是推送失败,则由于远程分支比你本地更新,须要你先用git pull 尝试合并。
若是合并有冲突,则解决冲突,并在本地提交。
若是没有冲突或者解决掉冲突之后,,在用git push origin branch-name
推送。
若是git pull 提示no tracking information
,则说明本地分支和远程分支的链接没有建立。
git branch
查看当前分支
git branch -v
查看每一个分支的最后一次提交。
git branch -a
查看本地和远程分支状况
git branch --merged
查看已经与当前分支合并的分支
git branch --no-merged
查看已经与当前分支未合并的分支
git branch -r
查看远程分支
git branch dev
建立dev分支
git checkout dev
切换到dev分支
git checkout -b dev
建立并切换分支
git merge dev
名称为dev的分支与当前分支合并
git branch -d dev
删除分支dev