origin和master
远程仓库名字origin
与分支名字master
一样,在Git中没有任何特别的含义
同时master
是当你运行git init
时默认的起始分支名字,原因仅仅是它的广泛使用,origin
是当你运行git clone
时默认的远程仓库名字
git clone
假设你的网络里有一个在 git.ourcompany.com
的 Git 服务器
如果你从这里克隆,Git的clone
命令会为你自动将其命名为origin
,拉取它的所有数据, 创建一个指向它的master
分支的指针,并且在本地将其命名为 origin/master
Git也会给你一个与 origin/master
指向同一个地方的本地master
分支,这样你就有工作的基础
thegit clone
command automatically sets up your local master branch to track the remote master branch
origin/master
如果你在本地的 master
分支做了一些工作,在同一段时间内有其他人推送提交到 git.ourcompany.com
并更新了它的 master
分支,这就是说你们的提交历史已走向不同的方向。 即便这样,只要你保持不与 origin
服务器连接(并拉取数据),你的 origin/master
指针就不会移动
git fetch <remote>
命令(本例中为git fetch origin
)。 这个命令查找 origin
是哪一个服务器(本例中,它是 git.ourcompany.com
),从中抓取本地没有的数据,并且更新本地数据库,移动 origin/master
指针到更新之后的位置
git fetch
命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。 它只会获取数据然后让你自己合并
删除远程分支
假设你已经通过远程分支做完所有的工作了,也就是说你和你的协作者已经完成了一个特性, 并且将其合并到了远程仓库的master
分支(或任何其他稳定代码分支)。
可以运行带有 --delete
选项的 git push
命令来删除一个远程分支。 如果想要从服务器上删除 serverfix
分支,运行下面的命令
git push origin --delete serverfix
基本上这个命令做的只是从服务器上移除这个指针。Git 服务器通常会保留数据一段时间直到垃圾回收运行,所以如果不小心删除掉了,通常是很容易恢复的
跟踪分支
跟踪分支是与远程分支有直接关系的本地分支
当克隆一个仓库时,它通常会自动创建一个跟踪origin/master
的master
分支
要注意的是当抓取到新的远程分支时,本地不会自动生成一份可编辑的副本(拷贝)
换句话说,这种情况下,不会有一个新的serverfix
分支,只有一个不可修改的origin/serverfix
指针
可以运行git merge origin/serverfix
将这些工作合并到当前所在分支
如果想要在自己的serverfix
分支上工作,可以将其建立在远程分支之上:
有三种方式都可以
$ git checkout -b serverfix origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
$ git checkout serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
这会给你一个用于工作的本地分支,并且起点位于origin/serverfix
设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支
你可以在任意时间使用 -u
或 --set-upstream-to
选项运行 git branch
来显式地设置
$ git branch -u origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
如果想查看设置的所有跟踪分支,可以使用git branch
的 -vv
选项
这会将所有的本地分支列出来并且包含更多的信息,如每个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有
https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF