git分支管理

git分支确实是一个非常好的东西,先看一个截图吧:


这个图其实是很有讲究的,其中历史上的工作顺序是从C0->C1->C2->...->C13。


下面开始正式备忘一下git与分支有关的记录。

首先,需要明确的一个概念是无论是远程仓库还是本地仓库,git会自动将这个仓库命名成origin,默认会有一个主分支,叫master,所以引用origin仓库中master分支可以表示成origin/master。

1. 查看当前本地仓库有哪些分支的指令是:

git branch


zhangyuanlong ~/signal_sdk-master/signal_sdk$git branch

* 1.3.0

  master

这里说明我们有两个分支,一个叫1.3.0,另外一个就是主分支master。其中以*标示的含义是当前的工作分支是哪一个,这里就是1.3.0。

2. 创建分支的指令是:

git branch branchname

例如,我要创建一个叫helloworld的分支,可以这么做:

zhangyuanlong ~/signal_sdk-master/signal_sdk$git branch helloworld

zhangyuanlong ~/signal_sdk-master/signal_sdk$git branch

* 1.3.0

  helloworld

  master


3. 切换分支

如果要切换到刚才创建的分支helloworld上,可以使用指令:

git checkout branchname

zhangyuanlong ~/signal_sdk-master/signal_sdk$git checkout helloworld

M prj_android/myapp1/.idea/misc.xml

M prj_android/myapp1/.idea/workspace.xml

M prj_android/myapp1/myapp1.iml

M prj_android/myapp1/project.properties

Switched to branch 'helloworld'

zhangyuanlong ~/signal_sdk-master/signal_sdk$git branch

  1.3.0

* helloworld

  master


4. 删除分支

如果要删除一个分支,可以使用:

git branch -d branchname

zhangyuanlong ~/signal_sdk-master/signal_sdk$git branch

  1.3.0

* helloworld

  master

zhangyuanlong ~/signal_sdk-master/signal_sdk$git branch -d helloworld

error: Cannot delete branch 'helloworld' checked out at '/Users/zhangyuanlong/signal_sdk-master/signal_sdk'

zhangyuanlong ~/signal_sdk-master/signal_sdk$git branch -D helloworld

error: Cannot delete branch 'helloworld' checked out at '/Users/zhangyuanlong/signal_sdk-master/signal_sdk'

zhangyuanlong ~/signal_sdk-master/signal_sdk$git checkout master

M prj_android/myapp1/.idea/misc.xml

M prj_android/myapp1/.idea/workspace.xml

M prj_android/myapp1/myapp1.iml

M prj_android/myapp1/project.properties

Switched to branch 'master'

Your branch is behind 'origin/master' by 3 commits, and can be fast-forwarded.

  (use "git pull" to update your local branch)

zhangyuanlong ~/signal_sdk-master/signal_sdk$git branch -d helloworld

error: The branch 'helloworld' is not fully merged.

If you are sure you want to delete it, run 'git branch -D helloworld'.


以上操作流程展示了删除分支需要注意以下两点:

  • 如果你正在当前分支工作,你是不能删除该分支的,你必须切换到其他分支才能删除分支;
  • 如果一个分支做了修改,但是还没有合并到其他分支上去,你使用git branch -d branchname是无法删除的,git会给出提示,如果你真的要强行删掉该分支,可以使用: git branch -D branchname
5. 合并分支
如果你需要将两个分支合并的话,可以使用:
git merge branchname
注意:git merge指定的分支名称会与当前所在的分支合并。比如,当前处于helloworld分支,我们输入git merge hahaha,则是将hahaha合并到helloworld分支上。

zhangyuanlong ~/signal_sdk-master/signal_sdk$git checkout helloworld

M prj_android/myapp1/.idea/misc.xml

M prj_android/myapp1/.idea/workspace.xml

M prj_android/myapp1/myapp1.iml

M prj_android/myapp1/project.properties

Switched to branch 'helloworld'

zhangyuanlong ~/signal_sdk-master/signal_sdk$git merge hahaha

Already up-to-date.


6. 如何将分支提交到本地仓库

这个其实就是先:

git add 本分支修改的东西

再:

git commit -m "提交修改信息"

7. 将分支提交到远程仓库

git push 远程仓库名 分支名

因为远程的仓库名也叫origin(上文介绍过),所以我们将helloworld这个分支推送到远程仓库就可以使用:

  • git add modificationsUnderCurrentBranch(增加当前分支下的修改)
  • git commit -m "提交本分支修改到本地仓库"
  • git push origin helloworld
这样的话,远程仓库就有一个叫helloworld的分支了。别人如果需要同步这个分支,可以使用:
git fetch origin

$ git fetch origin

remote: Counting objects: 36, done.

remote: Compressing objects: 100% (6/6), done.

remote: Total 36 (delta 28), reused 36 (delta 28), pack-reused 0

Unpacking objects: 100% (36/36), done.

From github.com:AgoraLab/signal_sdk

   bbd9a3d..9d3402d  master              -> origin/master

   db36abb..9d3402d  1.3.0               -> origin/1.3.0

 * [new branch]      helloworld          -> origin/helloworld


这条语句相当于拉取远程仓库origin下的所有分支。一般都会有一个默认分支叫master,所以平常我们执行git fetch origin实际会拉取master分支。

如果希望再提交分支的时候,希望本地的分支名称提交到远程仓库是另外一个名字,可以使用如下指令:

git push origin localbranchname:remotebranchname

例如:提交helloworld分支到远程仓库上的名字是mytest,则可以执行:

git push origin helloworld:mytest

zhangyuanlong ~/signal_sdk-master/signal_sdk$git push origin helloworld:mytest

Total 0 (delta 0), reused 0 (delta 0)

To github.com:AgoraLab/signal_sdk.git

 * [new branch]      helloworld -> mytest


8. 跟踪远程分支

将本地分支与远程分支绑定在一起,即本地分支追踪远程某个分支,可以使用如下命令:

git checkout -b [本地分支名] [远程仓库名]/[远程分支名]

例如,本地的helloworld分支追踪远程的mytest分支,可以使用:

git checkout -b helloworld origin/mytest

由于默认远程和本地都有一个master分支,所以我们平常执行git push或者git pull实际上相当于:

git push origin master

git checkout -b master origin/master

9. 删除远程分支

git push [远程仓库名,例如origin] :[分支名]

例如删除远程服务器的helloworld分支:

zhangyuanlong ~/signal_sdk-master/signal_sdk$git push origin :helloworld

To github.com:AgoraLab/signal_sdk.git

 - [deleted]         helloworld


这个命令很奇怪,其实你可以理解相当于不指定本地分支的名字。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值