添加和删除远程分支 – Git 分支

这一节将要讨论的命令:

  • git branch
  • git checkout
  • git push
  • git remote

创建远程分支

创建一个新的分支到远程目录中可以使用这种方法,先将分支添加到你的本地仓库,然后将该本地分支推送到远程仓库中. 让我们看看我们现在有哪些分支:

amy$ git branch
* master

我们只有一个分支. 还没多到数不清的地步. 因此Amy创建了一个新的分支 v0:

amy$ git branch v0

然后她将分支 v0 推送到远程仓库 origin.

git push的语法为: git push [remote-repository-name] [branch-or-commit-name]:

amy$ git push origin v0
Total 0 (delta 0), reused 0 (delta 0)
To file:///home/gitadmin/project1.git
 * [new branch]      -v0> v0

目前 master 以及 v0 分支完全相同, 但接下来他们将出现不同 (分支存在的全部意义就是不同)
因为用户会对每个分支进行不同的提交.

跟踪新的分支: 其他用户

当其他用户使用 git clone 共享仓库, 这个 git clone 命令将自动:

  • 创建一个新的本地分支,名为 v0
  • 正确地配置其本地仓库来正确的 track 新分支的修改,即 v0 branch. 例如, 当用户是在新的本地 v0 branch, 用户可以输入 git fetchgit pull, 以及 git push 命令,而无需在每个命令时都指定 origin 远程仓库名和 v0 分支名.

跟踪新的分支: Amy (远程分支的创建者)

由于艾米创建了新的远程分支, 她需要更多的配置以使本地的 v0 分支正确的得到配置.

我们可以看到, v0 分支对Amy来说尚未配置正确:

amy$ git checkout v0
Switched to branch 'v0'
$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.v0.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull  ').
See git-pull(1) for details.

If you often merge with the same branch, you may want to
use something like the following in your configuration file:

    [branch "v0"]
    remote = 
    merge = 

    [远程 ""]
    url = 
    fetch = 

See git-config(1) for details.

如果她很喜欢打字, 她可以一直指定远程仓库 (origin) 和分支 (v0) ,当每次她需要pull或者fetch时:

amy$ git pull origin v0
From file:///home/gitadmin/project1
 * branch            v0       -> FETCH_HEAD
Already up-to-date.


然而, Amy最近玩排球时弄坏了指甲所以她想尽量少的打字. 所以她配置git来自动pull/fetch更新,来自远程的 v0 branch, 而无需指定v0 仓库和分支名称,这样就可以很方便的使用 git pull 或 git fetch.

她正在运行的是 1.7.0 版的git,该版本有 set-upstream 参数:

amy$ git branch --set-upstream v0 origin/v0
Branch v0 set up to track remote branch v0 from origin.

早于 1.7.0 版本的git都没有 set-upstream 参数, 你可以使用下面的命令来代替上面的 git branch –set-upstream v0 origin/v0 命令:

$ git config branch.v0.remote origin
$ git config branch.v0.merge refs/heads/v0

这也同样可以很好的完成工作, 从现在开始, 她只需要:

amy$ git pull
Already up-to-date.

Zack也参与到新分支中

下一次Zack从共享仓库中获取最新的提交时, 他会惊讶的看到新的 v0 分支自动为他创建民:

zack$ git pull
From file:///home/gitadmin/project1
 * [new branch]      v0         -> origin/v0
 Already up-to-date.

扎克然后也可以切换到新的分支:

zack$ git checkout v0
Branch v0 set up to track remote branch v0 from origin.
Switched to a new branch 'v0'

扎克添加内容到新的分支

zack$ echo A Zack change >> zack.file
zack$ git commit -a -m'added a new line to zack.file'
[v0 93 c 1568] added a new line to zack.file
 1 files changed, 1 insertions(+), 0 deletions(-)
zack$ git push
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 302 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To file:///home/gitadmin/project1.git 05affb3...93 c 1568 v0-> v0

艾米删除远程分支

删除分支的语法并不是和我们直觉的一样. 若要删除一个远程分支, 使用 git push 命令,如下所示:

amy$ git push origin :v0
To file:///home/gitadmin/project1.git
 - [deleted]         v0

这个命令的另一种风格也可以做同样的事情, 但也许它看起来更符合直觉一些:

amy$ git push origin --delete v0
To file:///home/gitadmin/project1.git
 - [deleted]         v0

好吧, 也许也没有那么直观. 这个 git push origin 部分命令告诉 git 你想要修改一些东西,它位于远程仓库 origin, 命令剩下的部分 “delete v0” 告诉 git 你想要对远程仓库执行什么操作.

Zack移除跟踪分支,此分支的远程分支已被删除

当有人从远程仓库中删除一个分支后, git不会自动删除本地仓库的分支,即使使用了 git pull 或 git fetch. 然而, 如果用户想要将所有在远程仓库中被删掉的 跟踪分支 从他们本地仓库中移除, 他们可以输入:

zack$ git remote prune origin
Pruning origin
URL: file:///home/gitadmin/project1.git
 * [pruned] origin/v0

请注意上面的修剪删除了 跟踪 branch, 但没有删除 v0 这个在Zack本地仓库中的分支. 修剪的好, Zack. 你的灌木丛, 我的意思是, 项目, 现在和远程一致了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值