# Git 远程仓库与协作

## 远程仓库管理

### 查看与添加远程仓库

```bash
# 列出所有远程仓库的简写
 git remote
# 查看远程仓库的详细信息（抓取和推送地址）
 git remote -v
 # 添加一个新的远程 Git 仓库，同时指定一个简写
git remote add <别名>(origin) <url>              # 添加远程仓库（别名 origin）
git remote rm origin                     # 删除远程仓库
```
如果你克隆了一个仓库，至少应该能看到 `origin` ——这是 Git 给克隆源仓库的默认名字。

### 拉取与推送

| 命令                                    | 说明                                |
| ------------------------------------- | --------------------------------- |
| `git fetch origin`                    | 拉取远程仓库所有数据（不自动合并）                 |
| `git pull origin master`              | 拉取并自动合并到当前分支（等效于 `fetch + merge`） |
| `git push origin master`              | 将本地 master 分支推送到远程                |
| `git push origin --delete branchName` | 删除远程分支                            |

从远程仓库获取数据
1. git fetch —— 仅下载，不合并

```bash
# 从远程仓库拉取所有尚未获取的数据
$ git fetch <远程仓库名>

# 示例：从 origin 抓取更新
$ git fetch origin
```
重要说明：

git fetch 只会将数据下载到本地仓库，更新 origin/master 等远程分支引用

它不会自动合并或修改你当前的工作目录

准备好后，需要手动合并：git merge origin/master

2. git pull —— 下载并自动合并

```bash
# 从远程仓库抓取数据并自动合并到当前分支
$ git pull <远程仓库名> <分支名>

# 示例（当前在 master 分支）
$ git pull origin master

```
说明：

git pull = git fetch + git merge

如果当前分支设置了跟踪远程分支，可以直接运行 git pull（无需指定参数）

默认情况下，git clone 会自动设置本地 master 分支跟踪远程的 master 分支


### 推送到远程仓库


```bash
# 推送本地分支到远程仓库
$ git push <远程仓库名> <本地分支名>
# 示例：将本地 master 推送到 origin 的 master
$ git push origin master
```

**注意**：

- 需要指定具体的本地分支，否则默认推送当前所在分支
    
- 推送前请确保本地分支已合并了远程的最新更新（使用 `git pull` 先同步）
    

> 💡 使用 `git remote -v` 可查看可抓取或推送的 origin 地址。

### 远程仓库与本地分支的关系

在 Git 中，**远程仓库（origin**和**本地分支（master)** 是两个不同的概念：

|概念|说明|
|---|---|
| `origin` |远程仓库的默认名称，是 Git 给远程仓库起的“别名”|
| `master` |本地仓库的默认分支名称，存储本地的提交历史|
| `origin/master` |**本地**存储的远程 `master` 分支的引用（指向远程仓库 master 的最新提交），不是实际的分支|

**三者关系示例**：


```bash
# 1. 从远程仓库克隆后，Git 自动创建 origin 引用和本地 master 分支
# 2. 拉取远程更新（更新 origin/master 引用）
$ git fetch origin
# 3. 查看本地 master 和远程 origin/master 的差异
$ git diff master origin/master
# 4. 推送本地更新到远程仓库
$ git push origin master
```

> 📌 **核心理解**：`origin/master` 是你本地仓库中**指向远程仓库 master 分支状态的一个指针**，而 `master` 是你本地实际工作的分支。两者可能不同步。

> 关于远程分支的创建、跟踪与重命名，请继续阅读 [[Git 远程分支与跟踪]]。

---

[[版本控制系统]] · [[Git学习顺序]] · 上一章：[[Git 分支管理]] · 下一章：[[Git 远程分支与跟踪]]
