第3节:Git
Git是分布式版本控制系统,用于追踪文件变化和协作开发,是当前软件工程师主流的代码管理工具。
1. 安装Git
访问Git官网下载对应你操作系统的安装包并执行安装程序,通常使用默认选项即可。
安装完成后,打开你的命令行工具(例如:Windows上的Command Prompt或PowerShell,macOS或Linux上的Terminal),输入以下命令:
git --version
如果命令行返回了Git的版本信息(例如 git version 2.30.0.windows.1
),则说明Git已经成功安装。
2. 注册与配置代码托管平台账号(以Gitee为例)
虽然Git是本地工具,但通常我们会配合远程代码托管平台使用,如GitHub或Gitee(码云)。这些平台可以:
- 备份你的代码项目。
- 方便你与他人协作。
- 参与或下载网络上的开源项目。
由于GitHub在某些地区访问可能不稳定,这里我们推荐使用国内的代码托管平台Gitee (码云)。其基础的版本控制功能与GitHub类似。请先访问Gitee官网注册一个账号。
3. 创建远程仓库与本地配置
远程仓库是托管在服务器(如Gitee)上的项目副本。
在Gitee上创建远程仓库:
- 登录Gitee后,通常会有一个"新建仓库"或"+"号的按钮,点击它。
- 仓库名称:给你的项目起一个名字。
- 路径:通常会自动根据仓库名称生成,你也可以自定义。
- 是否开源:选择"公开"则任何人可见(成为开源项目),选择"私有"则仅自己或授权成员可见。对于个人笔记或未完成的项目,建议选择"私有"。
- 初始化仓库:可以选择添加
.gitignore
(指定哪些文件不纳入版本控制)、README.md
(项目说明文件)等。初学者可以先创建一个空仓库,后续再添加这些文件。 - 点击"创建"按钮。
全局Git用户信息初始化 (本地配置): 在你第一次使用Git提交代码前,需要告诉Git你的身份。这个设置在你的电脑上只需要进行一次。打开命令行工具输入:
git config --global user.name "你的Gitee用户名或昵称"
git config --global user.email "你注册Gitee时使用的邮箱"
例如:
git config --global user.name "晓舟报告"
git config --global user.email "xiaozhoubaogao@163.com"
将本地项目上传到远程仓库: 如果你本地已经有了一个项目文件夹,想要把它上传到Gitee上刚创建的空仓库:
## 1. 进入你的本地项目文件夹 (使用 cd 命令)
## cd path/to/your/project
## 2. 初始化本地仓库:在项目根目录下执行,这会在你的项目文件夹中创建一个 .git 的隐藏子目录,用于Git追踪版本。
git init
## 3. 添加文件到暂存区:例如添加一个 README.md 文件。'.'代表添加当前目录下所有修改过的文件。
git add README.md
## 或者 git add .
## 4. 提交暂存区的文件到本地仓库:-m 后面是本次提交的说明信息。
git commit -m "首次提交:初始化项目并添加README"
## 5. 关联本地仓库与远程仓库:将 <你的Gitee用户名> 和 <你的仓库名> 替换为实际值。
## 'origin' 是远程仓库的默认别名。
git remote add origin git@gitee.com:<你的Gitee用户名>/<你的仓库名>.git
## 例如: git remote add origin git@gitee.com:xiaozhou_report/test.git
## 6. 推送本地仓库的master分支内容到远程仓库origin:
git push origin master
4. Clone远程仓库及SSH配置
Clone远程仓库: 如果你想获取一个已存在于Gitee(或其他平台)上的项目副本到你的本地电脑进行工作或学习,可以使用clone
命令。
## 将 <远程仓库的URL> 替换为实际的仓库地址 (SSH或HTTPS均可,推荐SSH)
git clone <远程仓库的URL>
例如,克隆一个名为test
的仓库:git clone git@gitee.com:xiaozhou_report/test.git
这会在当前目录下创建一个名为test
的文件夹,包含项目所有文件和版本历史。
配置SSH公钥实现免密操作 (推荐): 为了避免每次与远程仓库交互(如push
或clone
私有仓库)时都输入用户名和密码,可以配置SSH密钥。
- 检查或生成SSH密钥:打开命令行工具输入:按回车三次使用默认设置即可。如果提示已存在密钥,可以选择覆盖或使用现有密钥。
ssh-keygen -t rsa -b 4096 -C "你注册Gitee时使用的邮箱"
- 查看并复制公钥:SSH密钥对会生成在用户目录下的
.ssh
文件夹中(例如Windows上是C:\Users\你的用户名\.ssh\
,Linux/macOS上是~/.ssh/
)。找到名为id_rsa.pub
的文件,用文本编辑器打开它,复制其全部内容。这个.pub
文件包含的是你的公钥。 - 在Gitee添加公钥:
- 登录Gitee。
- 进入个人主页的"设置"菜单。
- 找到"安全设置"下的"SSH公钥"选项。
- 点击"添加公钥"或类似按钮。
- "标题"可以任意填写,例如"我的笔记本电脑"。
- 将刚才复制的
id_rsa.pub
文件内容粘贴到"公钥"文本框中。 - 点击"确定"或"保存"。
- 验证:之后,当你通过SSH协议克隆或推送你的Gitee项目时,就不再需要输入密码了。确保克隆时使用的是SSH格式的URL (通常以
git@
开头),而不是HTTPS格式的URL。
5. 仓库的基本概念和操作
理解Git的工作流程,关键在于理解它的几个核心区域:
- 工作区 (Working Directory):你电脑上实际的项目文件夹,包含你当前能看到和编辑的文件。
- 暂存区 (Staging Area / Index):一个特殊的文件,位于
.git
目录中。它记录了你下次要提交哪些文件的哪些改动。你可以把它想象成一个"待提交清单"。 - 本地仓库 (Local Repository):也是
.git
目录的一部分,保存了项目的所有版本历史。当你执行git commit
时,暂存区的内容会被永久记录到本地仓库中,形成一个新的版本快照。 - 远程仓库 (Remote Repository):托管在网络服务器(如Gitee)上的项目副本。
常用操作流程:
git add <文件名>
或git add .
: 将工作区中指定文件(或所有.
)的修改添加到暂存区。这是告诉Git:"这些改动我希望包含在下一次提交里"。git commit -m "提交说明"
: 将暂存区的所有内容提交到本地仓库,并附带一条说明信息,描述本次提交做了哪些更改。一个好的提交说明非常重要。git push origin master
: 将本地仓库master
分支的最新提交同步到名为origin
的远程仓库。这使得你的本地更改对其他人可见(如果仓库是共享的)。git pull
: 从远程仓库拉取最新的更改到你的本地工作区,并尝试自动合并。这通常是在开始一天的工作前,或协作时获取他人最新代码时使用。它等同于git fetch
(获取远程更新)后跟git merge
(合并更新)。
6. 分支管理 (Branch Management)
分支是Git的核心特性之一,它允许你偏离主线开发(通常是master
或main
分支)去进行新功能开发、Bug修复等,而不会影响到主线的稳定性。
- 查看分支:
git branch
- 列出所有本地分支,当前所在分支会以星号
*
标记。默认情况下,新仓库只有一个master
(或main
)分支。
- 列出所有本地分支,当前所在分支会以星号
- 创建分支:
git branch <分支名>
- 例如:
git branch dev
会创建一个名为dev
的新分支,该分支基于你创建它时所在的当前分支。
- 例如:
- 切换分支:
git checkout <分支名>
或git switch <分支名>
(新版Git推荐)- 例如:
git checkout dev
会将你的工作区切换到dev
分支。之后你的修改和提交都将作用于dev
分支。
- 例如:
- 创建并切换分支:
git checkout -b <新分支名>
- 这是创建分支和切换分支两个命令的快捷方式。例如
git checkout -b feature-xyz
。
- 这是创建分支和切换分支两个命令的快捷方式。例如
- 合并分支:
- 首先,切换到你想要并入更改的目标分支(例如
master
):git checkout master
- 然后,执行合并命令,将指定分支(例如
dev
)的更改合并进来:git merge dev
- 合并时可能会产生冲突(Conflict),需要手动解决后再提交。
- 首先,切换到你想要并入更改的目标分支(例如
- 删除本地分支:
git branch -d <分支名>
(小写d,安全删除,如果分支未合并会提示) 或git branch -D <分支名>
(大写D,强制删除) - 删除远程分支:
git push origin -d dev
- 本地分支推送到远程分支:
git push origin <本地分支名>:<远程分支名>
- 例如:
git push origin dev:dev
会将本地的dev
分支推送到远程origin
,并在远程创建一个名为dev
的分支(如果尚不存在)。如果远程分支名省略,通常默认为同名。 - 如果是第一次推送一个新创建的本地分支,可以使用
git push -u origin <分支名>
,-u
参数会建立本地分支与远程分支的追踪关系。
- 例如:
- 拉取远程分支到本地并创建对应本地分支:
git checkout -b <本地分支名> origin/<远程分支名>
- 例如:
git checkout -b dev origin/dev
会在本地创建一个名为dev
的新分支,该分支会自动追踪远程origin
仓库的dev
分支,并切换到这个新创建的本地dev
分支。
- 例如:
7. 版本回退与历史查看
Git记录了每一次提交,使得你可以方便地在不同版本间穿梭。
查看提交历史:
git log
- 显示从最近到最远的提交日志,包括提交哈希值(一长串字符,是每个提交的唯一ID)、作者、日期和提交说明。
git log --oneline
:以更简洁的单行格式显示。
版本回退:
git reset --hard <提交哈希值>
- 将当前分支的HEAD指针、暂存区和工作区都重置到指定的
<提交哈希值>
对应的状态。注意:--hard
参数会丢弃该提交之后的所有工作区和暂存区的未提交更改,以及后续的提交历史,请谨慎使用! 版本哈希值不需要写全,通常写前7位即可唯一识别。 - 如果只是想撤销提交,但保留工作区的更改,可以使用
git reset --soft <提交哈希值>
。 - 如果想撤销提交,保留工作区更改,并清空暂存区,可以使用
git reset --mixed <提交哈希值>
(这是默认选项)。
- 将当前分支的HEAD指针、暂存区和工作区都重置到指定的
查看命令记录 (引用日志):
git reflog
- 显示HEAD指针移动的记录,包括你执行过的
commit
、reset
、checkout
等操作。这非常有用,特别是当你错误地使用了git reset --hard
并想找回"丢失"的提交时,可以通过reflog
找到之前的提交哈希值,然后再次reset
回去。
- 显示HEAD指针移动的记录,包括你执行过的
撤销编辑区中的所有修改:
- git checkout -- .
- git checkout -- <文件名>
掌握了这些内容,就可以灵活使用Git管理自己的代码和文档了。