在公司进行项目开发,每个项目组多人,往往会共用同一个Github仓库地址。在合并分支的时候,有很多情况是出错的,无法合并。
git init
的时候,就会生成master这个名字,所有的记录都会在隐藏的文件夹.git/
下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
这样有什么优点呢??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
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
命令<<<<<<< , ======= ,>>>>>>>
标记不同分支的内容,我们修改后保存提交。这样,master和dev的分支如下:git merge
git checkout -n dev
git checkout master
,流程图如下:--no-ff
参数,表示禁用Fasr forword
git merge --no-ff -m "merge with no-ff"
git log --graph --pretty=online --abbrev-commit
公司开发一般需要三个分支:
master
主分支用来发布dev
日常开发bug
用来修改bug用的分支git push origin dev
一般多人协作的模式一般是这样
git push origin branch-name
推送自己修改。git push origin branch-name
推送。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