企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
## 3.5 远程分支 远程引用是对远程仓库的引用(指针),包括分支,标签等等。而远程跟踪分支是远程分支状态的引用,它们不能在本地修改,只能随网络通信操作时自动移动。远程跟踪分支以 `[remote]/[branch]` 形式命名。 假设网络里有一个在`git.ourcompany.com`的 Git 服务器。 如果从这里克隆,Git 的`clone`命令会为自动将其命名为`origin`,拉取它的所有数据,创建一个指向它的`master`分支的指针,并且在本地将其命名为`origin/master`。 ![](https://box.kancloud.cn/9bd921111ada406ed881d802712be1b2_800x577.png) 如果现在在本地的`master`分支做了一些工作,然而在同一时间,其他人推送提交到`git.ourcompany.com`并更新了它的`master`分支,那么在本地的提交历史将向不同的方向前进。并且只要不与 `origin` 服务器连接,本地的`origin/master`指针就不会移动。 ![](https://box.kancloud.cn/6ee93c56264c617d625317fc9d32e32c_800x492.png) 如果需要通过本地的工作,运行`git fetch origin`命令。 这个命令查找 `origin` 是哪一个服务器(`git.ourcompany.com`),从中抓取本地没有的数据,并且更新本地数据库,移动`origin/master`指针指向新的、更新后的位置。 ![](https://box.kancloud.cn/787c2f17eace40db9550bf6935c7eb95_800x588.png) ### 3.5.1 推送远程分支 当你想要公开分享一个分支时,需要将该分支推送到有写入权限的远程仓库上。本地仓库的分支不会自动与远程仓库同步,所以必须显式地推送想要分享的分支。 ``` $ git push [remote] [branch] ``` 该指定会推送本地的 `[branch]` 分支到远程库 `[remote]` 上,并更新它的 `[branch]` 分支。 如果远程仓库的分支与本地仓库的分支名字不同,可以显式的指示目标分支: ``` $ git push [remote] [branch]:[target_branch] ``` ### 3.5.2 跟踪分支 **创建跟踪分支** 如果想要在远程跟踪分支的基础上创建新的本地分支,并提交操作,可以使用: ``` $ git checkout -b [branch] [remote]/[branch] $ git checkout --track [branch] [remote]/[branch] ``` 这类分支叫做”跟踪分支“,也叫”上游分支“,跟踪分支是与远程分支有直接关系的本地分支,如果在跟踪分支上执行 `git pull` 命令,Git 能自动识别,以及抓取和合并远程分支。 如果想要设置一个已有分支的跟踪远程分支,可以使用 `-u` 或者 `--set-upstream-to` 参数: ``` $ git checkout -u [remote]/[branch] $ git checkout --set-upstream-to [remote]/[branch] ``` **查看跟踪分支** 如果想要查看设置的所有跟踪分支,可以使用 `-vv` 参数: ``` $ git branch -vv ``` ### 3.5.3 拉取远程分支 `fetch`命令会从服务器上抓取本地没有的数据,但并不会修改工作目录中的内容,只会获取数据然后让你自己合并。 ``` $ git fetch ``` 而 `pull` 命令在大多数情况的含义是 `fetch` 和 `merge` 。 ### 3.5.4 删除远程分支 如果想要将远程库中对应的分支一并删除,可以推送一个空的分支到远程库: ``` $ git push [remote] :[branch] ``` 在 Git v1.7 后,也可以使用: ``` $ git push [remote] --delete [branch] ``` 直接删除远程库中的分支。