1.Git 分支 - 分支简介
1.分支创建
Git 的分支本质上仅仅是指向提交对象的可变指针。Git 的默认分支名字是 master。Git 是怎么创建新分支的呢?它只是为你创建了一个可以移动的新的指针。 比如,创建一个 testing 分支, 你需要使用 git branch 命令:
git branch 分支名 #创建新分支
git log --oneline --decorate #该命令可查看不同分支的指针指向的提交文件代码
2.Git 又是怎么知道当前在哪一个分支上呢?
它有一个名为 HEAD 的特殊指针,指向当前所在的本地分支(注:将HEAD 想象为当前分支的别名)。
git branch # git branch命令列示本地所有分支,前有*号的分支表明目前所处的分支
3.分支切换及分叉
要切换到一个已存在的分支,你需要使用 git checkout 命令:该命令将HEAD指针切换到指定的分支上,在该分支上作出的修改并提交。一旦HEAD指针切回至原来的分支,工作目录下的文件将被恢复(需要保证切回前的分支处于clean状态才能顺利切回):
git checkout 分支名 #切换到已存在的分支上
git checkout master #从其他分支切换回master分支,master分支并无特殊性,只是默认名称为master
不同分支上修改并提交会导致分叉,采用如下命令查看分叉情况:
git log --oneline --decorate --graph --all
4.创建新分支和切换到该分支可用一条命令完成
git checkout -b 新分支名 #该条命令相当于创建和切换两条命令
2.Git 分支 - 分支的新建与合并
1.合并分支
git checkout master #切换回需要合并至的主分支上
git merge 分支名 #需要合并至主线的分支名
2.删除失效分支
git branch -d 分支名 #使用参数-d来删除分支
git branch —D 分支名 #使用参数-D来强制删除分支
3.遇到冲突时的分支合并
如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没法干净的合并它们,在合并它们的时候就会产生合并冲突,此时 Git 做了合并,但是没有自动地创建一个新的合并提交。 Git 会暂停下来,等待你去解决合并产生的冲突。 你可以在合并冲突后的任意时刻使用 git status 命令来查看那些因包含合并冲突而处于未合并(unmerged)状态的文件。 你可以打开冲突文件手动解决冲突,在解决了所有文件里的冲突之后,对冲突文件使用
git add 冲突文件
命令将修改提交到暂存区,以此来将其标记为冲突已解决。如果有效的解决了冲突进一步可git commit -m 'commit_information'
来提交暂存的文件;失效的分支进一步可以采用命令git branch -d/D 分支名
来删除;
3.Git 分支 - 分支管理
1.查看所有分支
git branch #git branch不加任何选项会列示所有的分支,前有*号的分支为HEAD指向的分支
git branch -v #查看所有分支最后一次提交的信息
git branch --merged #查看哪些分支已经合并到当前所在分支
git branch --no-merged #查看哪些分支未合并到当前所在的分支
4.Git 分支 - 远程分支
参见说明:link
1.获得远程分支信息
列示远程分支信息的一些命令:
git ls-remote [远程仓库名]
git remote show [远程仓库名] #远程仓库名一般都是Git自动分配的名称origin
2.从远程仓库获取信息、同步远程本地数据
从名为origin的远程仓库(git在本地自动给远程仓库默认命名为origin,实际上服务器中该仓库名不一定是origin)中抓取新的信息,git fetch不会自动将远程仓库中的跟新合并至本地仓库文件中,需要再行手动合并:(fetch后如何合并?如何fetch远程库中不同的分支?)
git clone https://github.com/libgit2/libgit2 mylibgit #将远程仓库libgit2克隆至本地mylibgit文件夹中
git clone -o 新仓库名 #将git默认的远程仓库名origin重新命名
git fetch origin #origin是clone远程仓库时git分配给该远程仓库的默认名称,origin可修改
git merge #fetch修改后再merge至本地仓库
git commit -m '提交信息' #提交合并了修改后的文件
3.一个本地仓库可以关联多个远程仓库
git clone时会自动关联到被克隆的远程仓库,如果想再关联其他远程仓库使用git remote add命令,示例如下:
# 将远程仓库关联本地仓库并命名为pb
git remote add pb https://github.com/paulboone/ticgit
4.推送
当你想要公开分享一个分支时,需要将其推送到有写入权限的远程仓库上。 本地的分支并不会自动与远程仓库同步——你必须显式地推送想要分享的分支,使用命令:
git push (remote) (branch): remote为远程仓库名,branch为远程仓库的分支;示例如下:
git push origin branch1 #推送至远程仓库origin的branch1分支上
5.追踪远程仓库上的不同分支
git checkout -b [本地branch名] [remotename]/[branch]
git checkout --track origin/branch1 #追踪origin远程库中的branch1分支
6.删除本地的远程仓库和本地存在的远程分支
git push origin --delete sf #删除本地存在的origin远程仓库中sf分支,该命令不会删除服务器中相分支
git remote rm oringin #删除origin远程仓库,origin是远程仓库在本地的名称,该名称可修改
7.变基
参照:link