Skip to content

☁️ 第十章:远程仓库 —— 云端的代码仓库

添加远程仓库

本地仓库再好,代码只在你一台电脑上。如果硬盘坏了?找谁哭去?所以我们需要把代码推送到远程仓库(如 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

对比项SSHHTTPS
地址格式git@github.com:user/repo.githttps://github.com/user/repo.git
认证方式SSH 密钥(配好后免密)用户名密码或 Token
安全性更高依赖 HTTPS
适用场景日常开发(推荐)临时克隆、CI/CD
防火墙可能被封(端口 22)几乎不会被封(端口 443)