分支 分支:master分支、dev分支、功能分支、bug分支
什么是分支:
分支就是一条时间线,每次commit后,git会把所有commit串成一条时间线,这条时间线就是一个分支,分支上有节点,每个节点表示一个commit。
HEAD是一个指针,指向当前的分支。
HEAD指向master,master指向commit,所以HEAD指向当前分支
时间线的形成:
一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点。
每次提交后,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长
为什么创建分支 用分支完成你的,在分支上开发,然后合并到主分支上,这样不会影响主分支。 因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。 创建新分支: 创建新分支 git branch dev ////dev是新分支的名字 创建新分支并切换到新分支 git checkout -b dev //dev新分支的名字 切换到想要的分支 git checkout dev //dev是想要进入的分支的名字 查看当前分支 git branch 删除分支 git branch -d dev 合并分支 普通模式合并(推荐) 合并后的历史有分支,能看出来曾经做过合并 git merge --no-ff -m "merge with no-ff" dev 快速合并(不推荐) git merge dev //当前在master分支上,把dev分支和master分支合并 fast forward合并就看不出来曾经做过合并。所以不要用快速合 git把master指向dev的当前提交,所以合并速度非常快。只有master没有变得时候可以这么干 解决冲突 只能手动解决冲突 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。 查看git历史提交日志,图形化展示 git log --graph //可以看到分支合并图 临时保存当前分支的工作现场 临时保存当前分支的工作现场 临时保存当前分支的工作现场是什么意思? 保存当前分支的工作现场,保存到硬盘中 工作现场:包含当前分支的工作区,暂存区 临时保存: git stash //可以把当前分支的工作现场“储藏”起来,等以后恢复现场后继续工作: git stash list命令看看刚才的工作现场存到哪去了 恢复分支 方法2(推荐): git stash pop//恢复的同时把stash内容也删了 方法1 git stash apply //恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除; 保存多个地方 你可以多次stash,恢复的时候,先用git stash list查看,然后恢复指定的stash,用命令: $ git stash apply stash@{0} 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。 推送分支到远程库 推送分支上的内容,到远程库上 git push origin master 推送master分支到远程库 origin 是远程库的名字 master 是本地的分支 git push origin dev 推送dev分支到远程库 创建新分支并切换到新分支,然后从远程库中拉取内容,然后关联远程库 git checkout -b dev origin/dev 已经有分支,从远程库中拉取内容 git pull git pull也失败了,原因是没有把本地dev分支与远程origin/dev分支的关联起来,根据提示,把dev和origin/dev关联起来 把本地的dev和远程库中dev分支创建关联关系 git branch --set-upstream-to=mayun/dev 多人协作的工作模式通常是这样: 首先,可以试图用git push origin branch-name推送自己的修改; 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并; 如果合并有冲突,则解决冲突,并在本地提交; 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功! 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to=mayun/dev 这就是多人协作的工作模式,一旦熟悉了,就非常简单 本地新建的分支如果不推送到远程,对其他人就是不可见的; 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
例子:
你的小伙伴已经向origin/dev分支推送了他的提交,而碰巧你也对同样的文件作了修改,并试图推送
推送失败,因为你的小伙伴的最新提交和你试图推送的提交有冲突,解决办法也很简单,Git已经提示我们,先用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送