背景与动机
本地提交只存在于自己的机器上。团队协作时,需要通过远程仓库共享提交。
远程协作的主线是:
git fetch / pull 获取远程变化git push 推送本地提交这一篇聚焦远程仓库相关命令,不展开本地提交和分支合并细节。
核心原理拆解
1. git remote:管理远程仓库别名
查看远程仓库:
git remote -v添加远程仓库:
git remote add origin <remote-url>修改远程仓库地址:
git remote set-url origin <new-remote-url>origin 只是远程仓库别名,不是固定必须叫这个名字。只是大多数项目默认使用 origin。
2. git fetch:只下载,不自动合并
git fetch 只下载远程提交和引用,不会自动修改当前工作分支:
git fetch origin它适合在合并前先观察远程发生了什么:
git log --oneline --graph --decorate --all如果你想先看远程分支变化,再决定是否合并,优先用 fetch。
3. git pull:下载并更新当前分支
git pull 用来把远程分支更新到当前本地分支:
git pull origin main默认情况下,git pull 可以理解成:
git fetch + git merge但如果配置了 rebase 策略,pull 也可能表现为:
git fetch + git rebase团队协作时要统一 pull 策略,否则同一条分支历史可能被不同人拉出不同形态。
4. git push:把本地提交推送到远程
推送当前分支到远程:
git push origin main第一次推送新分支时,通常需要设置上游分支:
git push -u origin <branch-name>之后在这个分支上可以直接执行:
git pushgit pull-u 的作用是建立本地分支和远程分支的跟踪关系。
5. 谨慎使用强制推送
不要随意使用强制推送:
git push --force它可能覆盖别人已经推送到远程的提交。
如果确实需要改写远程历史,更推荐用相对安全的写法:
git push --force-with-lease它会先确认远程分支没有被别人推进过,降低覆盖别人提交的风险。
常见工作流示例
第一次推送新分支
git switch -c feature/login
# 修改并提交
git push -u origin feature/login拉取远程更新前先检查
git status -sbgit fetch origingit log --oneline --graph --decorate --allgit pull origin main如果本地工作区还有未提交变更,先提交、stash,或者明确丢弃后再拉取,避免混在一起难排查。
修改远程地址
git remote -vgit remote set-url origin git@github.com:user/project.gitgit remote -v修改前后都看一次远程地址,避免推送到错误仓库。
常见陷阱
1. 没确认当前分支就 push
推送前先看:
git status -sb确认当前分支和远程跟踪分支是否符合预期。
2. 误以为 fetch 会改变当前代码
fetch 只更新远程引用,不会自动修改当前工作区。想把远程变化合进当前分支,还需要 merge、rebase 或直接使用 pull。
3. 在共享分支上随意强推
共享分支上强推可能覆盖别人提交。除非团队明确约定,否则不要对共享分支执行强制推送。
一句话总结
远程协作的关键是:fetch 先看,pull 更新,push 分享;涉及改写历史时必须格外谨慎。