git分支
新建一个分支指针
git branch testing #新建一个叫testing的分支指针 #git branch 命令,仅仅是建立了一个新的分支,但不会自动切换到这个分支中去
切换到其他分支
git checkout testing git checkout -b testing == "git branch testing" + "git checkout testing" git checkout -d testing #删除testing分支 #留心暂存区或者工作目录里,那些还没有提交的修改,它会和即将检出的分支产生冲突从而阻止Git转换分支。
合并分支
git checkkout master #合并前,需要先检出想要更新的分支 git merge testing #把当前分支和testing分支合并 #如果顺着一个分支走下去可以到达另一个分支,那么 Git 在合并两者时,只会简单地把指针前移,因为没有什么分歧需要解决,所以这个过程叫做快进
冲突的合并
如果你修改了两个待合并分支里同一个文件的同一部分,Git 就无法干净地把两者合到一起,只能手动解决。可以使用git status查看哪里有冲突。。如果你想用一个有图形界面的工具来解决这些问题,不妨运行 git mergetool,它会调用一个可 视化的合并工具并引导你解决所有冲突。
管理分支
git branch#列出所有分支 git branch -v#查看各个分支最后一次 commit 信息 git branch --merged(--no-merged)#筛选出已经(或尚未)与当前分支合并的分支 git branch -d(-D) testing#(强制)删除分支
推送
git push origin(远程仓库名) serverfix(本地分支名)
抓取远程仓库的最新分支
git fetch origin #,在 fetch 操作抓来新的远程分支之后,你仍然无法在本地编辑该远程仓库。换句话说,在本例中,你不会有一个新的 serverfix 分支,有的只是一个你无法移动的 origin/serverfix 指针。如果要把该内容合并到当前分支,可以运行 git merge origin/serverfix。如果想要一份自己的 serverfix 来开发,可以在远程分支的基础上分化出一个新的分支来: git checkout -b serverfix origin/serverfix #这会切换到新建的 serverfix 本地分支,其内容同远程分支 origin/serverfix 一致,你可以在里面继续开发了。
跟踪远程分支
从远程分支检出的本地分支,称为跟踪分支(tracking branch)。跟踪分支是一种和远程分支有直接联系的 本地分支。在跟踪分支里输入 git push,Git 会自行推断应该向哪个服务器的哪个分支推送数据。反过来,在 这些分支里运行 git pull 会获取所有远程索引,并把它们的数据都合并到本地分支中来。
设定为跟踪其他分支(而非最新分支)
git checkout --track origin/serverfix #要为本地分支设定不同于远程分支的名字,只需在前个版本的命令里换个名字: git checkout -b sf origin/serverfix #现在本地分支 sf 会自动向 origin/serverfix 推送和抓取数据了。
删除远程分支
git push origin :serverfix #删除远程仓库的 serverfix 分支
衍合
把一个分支整合到另一个分支的办法有两种:merge(合并)和rebase(衍合)
git checkout experiment git rebase master #它的原理是回到两个分支(你所在的分支和你想要衍合进去的分支)的共同祖先,提取你所在分支每次提交时产生的差异(diff),把这些差异分别保存到临时文件里,然后从当前分支转换到你需要衍合入的分支,依序施用每一个差异补丁文件。
更多有趣的衍合
git rebase --onto master server client #检出 client 分支,找出 client 分支和 client 分支与 server 分支的共同祖先之后的变化,然后把变化在 master 上重演一遍 #然后合并master和client git checkout master git merge client git rebase 主分支 特性分支#命令会先检出特性分支server,然后在主分支master上重演: #然后合并master和server git checkout master git merge server
注意!!!!!
永远不要衍合那些已经推送到公共仓库的更新。