第五章 远程仓库 —— 多人协作的桥梁
5.1 远程仓库概念
远程仓库是托管在互联网或内网上的项目副本。常见的 Git 托管平台:GitHub、GitLab、Bitbucket、Gitee。
5.2 管理远程仓库
# 查看当前配置的远程仓库
git remote -v
# 添加远程仓库(origin 是默认名称)
git remote add origin https://github.com/user/repo.git
# 删除远程仓库
git remote remove origin
# 修改远程仓库的 URL
git remote set-url origin https://newurl.git
# 查看远程仓库详细信息
git remote show origin
# 重命名远程仓库
git remote rename origin upstream
5.3 克隆远程仓库
# HTTPS 方式(需要输入用户名密码或 token)
git clone https://github.com/username/repo.git
# SSH 方式(需要配置 SSH 密钥)
git clone git@github.com:username/repo.git
# 克隆到指定目录
git clone <url> my-folder
# 克隆特定分支
git clone -b develop <url>
# 浅克隆(只拉取最近的历史,节省时间)
git clone --depth 1 <url>
5.4 推送(Push)与拉取(Pull)
# 将本地当前分支推送到远程同名分支
git push origin master
# 完整语法
git push <remote> <local-branch>:<remote-branch>
# 示例:将本地 feature 推送到远程 feature-login
git push origin feature:feature-login
# 首次推送时设置上游分支(关联)
git push -u origin master # -u 是 --set-upstream 的简写
# 之后只需 git push 即可
# 删除远程分支
git push origin --delete feature
# 或
git push origin :feature
# 推送所有分支
git push --all origin
# 推送标签
git push origin --tags
git pull 的实质: git fetch + git merge
# 拉取远程更新并合并到当前分支
git pull origin master
# 等价于
git fetch origin
git merge origin/master
# 使用变基方式拉取(保持线性历史)
git pull --rebase
# 设置全局默认
git config --global pull.rebase true
5.5 获取远程更新但不合并(Fetch)
# 获取远程所有分支的更新,但不自动合并
git fetch origin
# 获取后,查看差异
git diff master origin/master
# 将远程分支合并到本地
git merge origin/master
# 或者拉取远程分支到本地新分支
git checkout -b local-branch origin/remote-branch
5.6 远程分支的跟踪
本地分支和远程分支建立跟踪关系后,git pull 和 git push 可以省略参数。
# 查看所有跟踪分支
git branch -vv
# 建立跟踪
git branch -u origin/master master
# 或
git branch --set-upstream-to=origin/develop develop
# 创建分支时自动跟踪同名远程分支
git checkout -b feature origin/feature
5.7 解决远程冲突
当你 git push 时,如果远程分支有新的提交(别人先推送了),Git 会拒绝推送。需要先拉取合并。
# 拉取远程更新
git pull
# 如果有冲突,解决冲突后提交
# 然后推送
git push
强制推送(危险,会覆盖远程历史):
git push --force origin master
# 更安全的强制推送(确保不会覆盖别人的工作)
git push --force-with-lease origin master
第六章 标签 —— 标记重要节点
标签用于为提交打上永久书签,常用于版本发布(如 v1.0.0)。
6.1 轻量标签与附注标签
轻量标签:仅仅是指向特定提交的指针,类似于分支但不移动
附注标签:存储在 Git 数据库中,包含打标签者姓名、邮箱、日期、标签信息(可签名)
# 创建轻量标签
git tag v1.0
# 创建附注标签(推荐用于发布)
git tag -a v1.1 -m "Release version 1.1"
# 给历史提交打标签
git tag -a v0.9 -m "Beta release" 9fceb02
# 查看所有标签
git tag
# 按模式筛选
git tag -l "v1.*"
# 查看标签信息
git show v1.0
# 推送标签到远程(默认 git push 不推送标签)
git push origin v1.0
# 推送所有标签
git push origin --tags
# 删除本地标签
git tag -d v1.0
# 删除远程标签
git push origin --delete v1.0
# 或
git push origin :refs/tags/v1.0
# 基于标签创建新分支(修复旧版本 Bug)
git checkout -b fix-v1.0 v1.0