☁️ 第十章:远程仓库 —— 云端的代码仓库
添加远程仓库
本地仓库再好,代码只在你一台电脑上。如果硬盘坏了?找谁哭去?所以我们需要把代码推送到远程仓库(如 GitHub、GitLab、Gitee)。
bash
# 查看远程仓库
git remote -v
(空输出,说明还没有远程仓库)
# 添加远程仓库(SSH 方式)
git remote add origin git@github.com:xiaoming/我的第一个网站.git
# 添加远程仓库(HTTPS 方式)
git remote add origin https://github.com/xiaoming/我的第一个网站.git
# 再次查看
git remote -v
origin git@github.com:xiaoming/我的第一个网站.git (fetch)
origin git@github.com:xiaoming/我的第一个网站.git (push)
# origin 是远程仓库的默认名字,你也可以取别的名字
# 但大家都用 origin,建议保持一致Push —— 推送到远程
bash
# 首次推送(-u 设置上游跟踪关系)
git push -u origin main
Enumerating objects: 9, done.
Counting objects: 100% (9/9), done.
Delta compression using up to 8 threads
Compressing objects: 100% (5/5), done.
Writing objects: 100% (9/9), 1.75 KiB | 1.75 MiB/s, done.
Total 9 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:xiaoming/我的第一个网站.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
# 之后直接 push 就行(因为已经设置了跟踪关系)
git push📝 备注: -u(即--set-upstream)只在第一次推送时需要。它建立了本地分支和远程分支的"跟踪关系"。之后直接git push和git pull就行了。
Fetch vs Pull
这两个命令经常让人混淆,但区别其实很简单:
bash
# fetch:只下载,不合并(安全,让你先看看有什么变化)
git fetch origin
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), 2.10 KiB | 2.10 MiB/s, done.
From github.com:xiaoming/我的第一个网站
f4e5d6c..a7b8c9d main -> origin/main
# 查看远程有什么新内容
git log HEAD..origin/main --oneline
# 确认没问题后,合并
git merge origin/main
# ─────────────────────────────────
# pull:下载并自动合并(= fetch + merge)
git pull
remote: Enumerating objects: 5, done.
From github.com:xiaoming/我的第一个网站
f4e5d6c..a7b8c9d main -> origin/main
Updating f4e5d6c..a7b8c9d
Fast-forward
README.md | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 README.md💡 提示: git pull=git fetch+git merge。如果你配置了pull.rebase = true,则git pull=git fetch+git rebase。建议新手先用默认的 pull(merge 模式),等熟悉了再考虑 rebase 模式。
SSH vs HTTPS
| 对比项 | SSH | HTTPS |
|---|---|---|
| 地址格式 | git@github.com:user/repo.git | https://github.com/user/repo.git |
| 认证方式 | SSH 密钥(配好后免密) | 用户名密码或 Token |
| 安全性 | 更高 | 依赖 HTTPS |
| 适用场景 | 日常开发(推荐) | 临时克隆、CI/CD |
| 防火墙 | 可能被封(端口 22) | 几乎不会被封(端口 443) |