# Git 远程分支与跟踪

## 远程分支与跟踪

### 拉取远程分支

```bash
git fetch origin                      # 获取远程所有分支
git branch stable origin/stable       # 创建本地分支并跟踪远程分支
git checkout stable                   # 切换到 stable 分支（会自动跟踪）
```

### 推送改名的本地分支到远程

```bash
git branch -m oldBranch newBranch     # 本地重命名
git push origin newBranch             # 推送新分支
git push --delete origin oldBranch    # 删除远程旧分支
```

疑难点：
### git clone 
克隆（clone）= 把远程仓库完整地复制到本地，包括：

所有文件

全部提交历史

所有分支

自动设置远程仓库（默认命名为 origin）

执行 git clone 后发生了什么

`$ git clone https://github.com/user/repo.git`
执行后，Git 会自动完成以下几件事：

自动操作	说明
创建本地仓库目录	创建一个名为 repo 的文件夹（与远程仓库同名）
下载所有数据	把远程仓库的全部文件、提交历史、分支都下载下来
自动添加远程仓库	把克隆的来源设置为远程仓库，默认命名为 origin
自动创建本地分支	创建本地的 master（或 main）分支，并自动跟踪远程的对应分支
自动检出默认分支	工作目录自动切换到默认分支（通常是 master 或 main）


### 本地仓库与远程仓库

- **本地仓库**：没有“仓库名称”，只有**分支名**（如 `master`、`main`、`dev`）。
    
- **远程仓库**：才有“仓库名称”（即你给远程库起的别名，默认叫 `origin`）。


为什么：
**你本地只有一个仓库**  
你在电脑上执行 `git init` 或 `git clone` 的那个文件夹，就是你的**本地仓库**。你**永远**处于这个仓库中，所以不需要给它起名字（就像你站在自己家里，不需要给“家”起个名字来定位自己一样）。

**2. 名字是用来“出门”找别人的**  
只有当你需要和**别的仓库**（通常在 GitHub/GitLab 服务器上）打交道时，才需要起名字来区分它们。

- 你可以同时和多个远程仓库打交道（比如同时推送到 GitHub 和 Gitee）。
    
- 为了区分它们，Git 才允许你给它们起别名（`origin`、`github`、`gitee`、`backup` 等）。

> [!note] 术语提醒
> `origin/main`（或 `origin/master`）是保存在本地的远程跟踪引用；`main`（或 `master`）才是本地工作分支。执行 `git fetch` 会更新前者，但不会自动改动当前工作区。

---

[[版本控制系统]] · [[Git学习顺序]] · 上一章：[[Git 远程仓库与协作]] · 下一章：[[Git 标签与版本发布]]
