远程仓库
要参与任何一个 Git 项目的协作,就需要知道如何管理远程仓库。远程仓库是托管在网络或其他位置的项目版本库,你可以从中拉取数据,也可以把自己的提交推送上去。
查看远程仓库
git remote
# origin
# 显示远程仓库的地址
git remote -v
# origin [email protected]:zhangsan/my-project.git (fetch)
# origin [email protected]:zhangsan/my-project.git (push)
# 查看某个远程仓库的详细信息
git remote show origin克隆的仓库会自动添加一个名为 origin 的远程仓库,这只是一个默认名字,没有特殊含义。
添加远程仓库
在本地 git init 创建的仓库,需要手动关联远程仓库:
git remote add origin [email protected]:zhangsan/my-project.git一个仓库可以关联多个远程仓库,比如同时推送到 GitHub 和 Gitee:
git remote add gitee [email protected]:zhangsan/my-project.git
git push gitee main修改与删除远程仓库
# 修改地址(例如从 HTTPS 换成 SSH)
git remote set-url origin [email protected]:zhangsan/my-project.git
# 重命名
git remote rename gitee mirror
# 删除
git remote remove mirror推送:git push
# 把本地 main 推送到 origin 的 main
git push origin main
# 第一次推送时设置上游分支,之后直接 git push 即可
git push -u origin main
# 推送所有本地分支
git push --all origin
# 删除远程分支
git push origin --delete feature-old如果远程分支有你本地没有的新提交,推送会被拒绝:
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'github.com:zhangsan/my-project.git'此时需要先拉取远程的更新,合并后再推送。
获取:git fetch
git fetch 会从远程仓库下载本地没有的数据,但不会修改你的工作区和当前分支:
git fetch origin
# 获取所有远程仓库
git fetch --all
# 同时清理远程已删除的分支
git fetch --prune获取之后,远程分支的状态保存在 origin/main 这样的远程跟踪分支中,可以先检查再决定是否合并:
git log main..origin/main
git merge origin/main拉取:git pull
git pull 相当于 git fetch 加上 git merge(或 git rebase):
git pull
# 使用变基方式拉取
git pull --rebase提示
新版 Git 在 pull 产生分叉时会提示你选择合并策略。推荐在全局设置
git config --global pull.rebase true,让个人提交始终排在远程更新之后,历史更整洁。
跟踪分支
从远程分支创建的本地分支会自动"跟踪"对应的远程分支,这样 git pull 和 git push 就知道和哪个远程分支交互:
# 基于远程分支创建本地分支(通常 git switch dev 就会自动完成)
git switch -c dev origin/dev
# 为当前分支设置上游
git branch -u origin/dev
# 查看所有分支的跟踪关系及领先/落后情况
git branch -vv配置 SSH 密钥
使用 SSH 协议可以免去每次推送都输入凭证的麻烦。
1. 生成密钥
ssh-keygen -t ed25519 -C "[email protected]"一路回车即可,密钥默认保存在 ~/.ssh/id_ed25519(私钥)和 ~/.ssh/id_ed25519.pub(公钥)。
2. 复制公钥
cat ~/.ssh/id_ed25519.pub3. 添加到平台
- GitHub:Settings → SSH and GPG keys → New SSH key
- Gitee:设置 → 安全设置 → SSH 公钥
- GitLab:Preferences → SSH Keys
4. 测试连接
ssh -T [email protected]
# Hi zhangsan! You've successfully authenticated...
ssh -T [email protected]警告
私钥(没有
.pub后缀的文件)绝对不能泄露给任何人,只把公钥添加到平台上。
HTTPS 认证
GitHub 已不再支持用账号密码进行 Git 操作。使用 HTTPS 时,需要在 GitHub 的 Settings → Developer settings → Personal access tokens 中创建个人访问令牌,推送时用它代替密码。
为了不用每次都输入,可以启用凭证助手:
# Windows(Git for Windows 默认已配置)
git config --global credential.helper manager
# macOS
git config --global credential.helper osxkeychain
# Linux:缓存 1 小时
git config --global credential.helper "cache --timeout=3600"把本地项目推送到 GitHub
完整流程如下:
# 1. 在 GitHub 上新建一个空仓库(不要勾选初始化 README)
# 2. 本地初始化并提交
git init -b main
git add .
git commit -m "初始化项目"
# 3. 关联远程并推送
git remote add origin [email protected]:zhangsan/my-project.git
git push -u origin main