第 7 章:remote、fetch、pull、push
学习目标
- 理解 remote 是远端仓库地址的别名。
- 区分
fetch和pull。 - 能把本地分支推送到远端。
- 知道推送被拒绝时先拉取和理解差异。
7.1 remote 是什么
远端仓库通常叫 origin,但 origin 只是一个名字。它指向一个 URL。
Git Bash / macOS / Linux
git remote -v如果没有远端,可以添加:
Git Bash / macOS / Linux
git remote add origin https://github.com/your-name/git-lab.git这一步只记录地址,不会自动上传代码。
7.2 第一次推送
把当前分支推送到远端,并建立上游关系:
Git Bash / macOS / Linux
git push -u origin main-u 的意思是把本地 main 和远端 origin/main 关联起来。以后在这个分支上可以直接运行:
Git Bash / macOS / Linux
git push
git pull7.3 fetch 和 pull 的区别
fetch 只下载远端变化,不自动改你的当前分支:
Git Bash / macOS / Linux
git fetch origin下载后可以看远端分支:
Git Bash / macOS / Linux
git log --oneline --decorate --graph --allpull 等于先 fetch,再把远端变化整合进当前分支:
Git Bash / macOS / Linux
git pull新手在不确定远端发生了什么时,可以先 fetch,看清楚再决定 merge 或 rebase。
7.4 推送被拒绝
如果别人已经推送了新提交,你的 git push 可能被拒绝。不要立刻强推。先运行:
Git Bash / macOS / Linux
git fetch origin
git status
git log --oneline --decorate --graph --all如果只是需要整合远端变化:
Git Bash / macOS / Linux
git pull
git push如果产生冲突,按第 5 章处理。
7.5 不要随便 force push
git push --force 会改写远端分支历史,可能让队友的本地仓库混乱。团队项目中,如果确实需要强推,至少使用:
Git Bash / macOS / Linux
git push --force-with-lease它会在远端不是你预期状态时拒绝覆盖,比普通 --force 安全。但新手阶段最好先找人确认。
本章练习
- 用托管平台创建一个空远端仓库。
- 给本地
git-lab添加origin。 - 运行
git push -u origin main。 - 在网页端编辑 README 并提交。
- 回到本地运行
git fetch origin,观察远端变化。 - 运行
git pull同步。
检查点
- 你知道 remote 是 URL 别名,不是另一个 Git 程序。
- 你能解释 fetch 不改当前分支,pull 会整合变化。
- 你不会在推送失败后直接强推。