Git 远程操作与标签管理
一、理解分布式版本控制系统
我们之前讨论的工作区、暂存区和版本库等概念,主要都是在本地环境中进行的。Git 本质上是一个分布式版本控制系统。这意味着每个人的电脑上都可以拥有一个完整的版本库副本。
这种架构带来了两个核心优势:
- 离线工作:开发过程中无需联网,版本库就在本地。
- 高安全性:即使某台电脑损坏,只要其他成员有备份,数据就不会丢失。
在多人协作场景下,通常需要一个'中央服务器'来方便交换修改。虽然理论上可以直接在两台电脑间推送,但实际开发中往往通过服务器中转。有了中央服务器,即便本地硬盘故障,也能从服务器恢复数据。
二、远程操作
1. 概述
同一个 Git 仓库可以分布在不同的机器上。每台机器的版本库地位平等,没有主次之分。为了便于协作,通常会搭建一台运行 Git 的服务器(如 GitHub 或 Gitee),大家从中克隆一份到自己的电脑,提交后推送到服务器,再从服务器拉取他人的更新。
对于国内开发者,考虑到网络速度,使用 Gitee 托管代码往往体验更佳。
2. 新建远程仓库
在 Gitee 上创建新项目时,填写基本信息并选择开源或私有属性即可。创建成功后,仓库默认包含一个 master 分支。

3. 克隆远程仓库
将远端仓库下载到本地,使用 git clone 命令。支持 SSH 和 HTTPS 两种协议:
- SSH 协议:安全性高,需配置公钥,免密码登录。
- HTTPS 协议:配置简单,但每次推送可能需要输入账号密码。
使用 HTTPS 方式
lighthouse@VM-8-10-ubuntu:gitcode$ git clone https://gitee.com/island0920/git_learning.git
Cloning into 'git_learning'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
使用 SSH 方式 若未配置公钥,会提示权限拒绝。此时需要生成 SSH Key 并添加到远程仓库。
第一步:创建 SSH Key
在用户主目录下检查是否有 .ssh 目录及密钥文件。若无,执行以下命令:
ssh-keygen -t rsa -C "[email protected]"
按提示操作,生成的私钥 id_rsa 需保密,公钥 id_rsa.pub 可公开。
第二步:添加公钥到远端仓库
复制 id_rsa.pub 的内容,在 Gitee 的"SSH 公钥"设置中添加。认证通过后,即可成功克隆。
克隆完成后,Git 会自动建立本地 master 分支与远程 origin/master 分支的关联。使用 git remote -v 可查看远程仓库地址。
4. 向远程仓库推送
本地修改并提交后,使用 git push 上传到远程。
git push origin master
该命令将本地的 master 分支推送到远程主机 origin 的 master 分支。若使用 SSH 协议,通常无需重复输入密码;若使用 HTTPS,则需注意每次推送的身份验证。
注意:确保本地配置的
user.name和user.email与远程仓库一致,否则可能导致提交记录归属错误。
5. 拉取远程仓库
当远程仓库有新内容时,使用 git pull 获取并合并到本地。
git pull origin master
如果本地和远程都有新提交,可能会遇到冲突。Git 提供了 git reset --hard <commit_id> 配合 git reflog 来恢复误操作的文件状态。
6. 常见问题:分支分叉
当本地和远程分支都产生了新提交且互不包含时,会出现 non-fast-forward 错误。这是因为 Git 不确定是合并(merge)还是变基(rebase)。
推荐解决方案(Merge)
git pull --no-rebase
这会创建一个合并提交,保留完整的历史记录。若有冲突,手动解决后标记为已解决并提交即可。
三、Git 配置优化
1. 忽略特殊文件
不想提交的文件(如配置文件、编译产物)可通过 .gitignore 文件排除。
*.ini
*.so
创建 .gitignore 后,这些文件将不会出现在 git status 中。若需强制添加被忽略的文件,可使用 git add -f。若规则有误,可用 git check-ignore -v 排查。
此外,可以使用 ! 符号排除特定文件,例如允许 .gitignore 本身不被忽略:
# 排除所有隐藏文件
.*
# 例外:保留 .gitignore
!.gitignore
2. 给命令配置别名
常用命令较长,可配置别名以提升效率。
# 全局配置 alias.st 对应 status
git config --global alias.st status
# 全局配置 alias.last 对应 log -1
git config --global alias.last 'log -1'
配置后,可直接使用 git st 或 git last 查看状态和最近一次提交信息。
四、标签管理
1. 理解标签
标签(Tag)是对特定 commit 的标识,类似于版本号。相比难以记忆的 commit ID,标签更易于识别和管理里程碑。
2. 创建标签
默认情况下,标签打在最新提交的 commit 上。
git tag v1.0
也可指定 commit ID 打标签:
git tag v0.9 7ce19f5
查看标签信息可使用 git show [tagname]。若要创建带说明的标签,使用 -a 和 -m 参数:
git tag -a v1.0 -m "Release version 1.0"
3. 操作标签
本地删除标签:
git tag -d v0.9
标签默认仅存储在本地,不会自动推送到远程。推送单个标签:
git push origin v1.0
推送所有标签:
git push origin --tags
删除远程标签需先删除本地标签,再推送空引用:
git push origin :refs/tags/v1.0
这样即可完成远程标签的清理工作。


