Git 远程仓库协作

笔记/CICD/Git版本控制/Git 远程仓库协作

背景与动机#

本地提交只存在于自己的机器上。团队协作时,需要通过远程仓库共享提交。

远程协作的主线是:

git fetch / pull 获取远程变化
git push 推送本地提交

这一篇聚焦远程仓库相关命令,不展开本地提交和分支合并细节。

核心原理拆解#

1. git remote:管理远程仓库别名#

查看远程仓库:

Terminal window
git remote -v

添加远程仓库:

Terminal window
git remote add origin <remote-url>

修改远程仓库地址:

Terminal window
git remote set-url origin <new-remote-url>

origin 只是远程仓库别名,不是固定必须叫这个名字。只是大多数项目默认使用 origin

2. git fetch:只下载,不自动合并#

git fetch 只下载远程提交和引用,不会自动修改当前工作分支:

Terminal window
git fetch origin

它适合在合并前先观察远程发生了什么:

Terminal window
git log --oneline --graph --decorate --all

如果你想先看远程分支变化,再决定是否合并,优先用 fetch

3. git pull:下载并更新当前分支#

git pull 用来把远程分支更新到当前本地分支:

Terminal window
git pull origin main

默认情况下,git pull 可以理解成:

git fetch + git merge

但如果配置了 rebase 策略,pull 也可能表现为:

git fetch + git rebase

团队协作时要统一 pull 策略,否则同一条分支历史可能被不同人拉出不同形态。

4. git push:把本地提交推送到远程#

推送当前分支到远程:

Terminal window
git push origin main

第一次推送新分支时,通常需要设置上游分支:

Terminal window
git push -u origin <branch-name>

之后在这个分支上可以直接执行:

Terminal window
git push
git pull

-u 的作用是建立本地分支和远程分支的跟踪关系。

5. 谨慎使用强制推送#

不要随意使用强制推送:

Terminal window
git push --force

它可能覆盖别人已经推送到远程的提交。

如果确实需要改写远程历史,更推荐用相对安全的写法:

Terminal window
git push --force-with-lease

它会先确认远程分支没有被别人推进过,降低覆盖别人提交的风险。

常见工作流示例#

第一次推送新分支#

Terminal window
git switch -c feature/login
# 修改并提交
git push -u origin feature/login

拉取远程更新前先检查#

Terminal window
git status -sb
git fetch origin
git log --oneline --graph --decorate --all
git pull origin main

如果本地工作区还有未提交变更,先提交、stash,或者明确丢弃后再拉取,避免混在一起难排查。

修改远程地址#

Terminal window
git remote -v
git remote set-url origin git@github.com:user/project.git
git remote -v

修改前后都看一次远程地址,避免推送到错误仓库。

常见陷阱#

1. 没确认当前分支就 push#

推送前先看:

Terminal window
git status -sb

确认当前分支和远程跟踪分支是否符合预期。

2. 误以为 fetch 会改变当前代码#

fetch 只更新远程引用,不会自动修改当前工作区。想把远程变化合进当前分支,还需要 mergerebase 或直接使用 pull

3. 在共享分支上随意强推#

共享分支上强推可能覆盖别人提交。除非团队明确约定,否则不要对共享分支执行强制推送。

一句话总结#

远程协作的关键是:fetch 先看,pull 更新,push 分享;涉及改写历史时必须格外谨慎。

文章目录

文章目录