第3节:Git

Git是分布式版本控制系统,用于追踪文件变化和协作开发,是当前软件工程师主流的代码管理工具。

1. 安装Git

访问Git官网open in new window下载对应你操作系统的安装包并执行安装程序,通常使用默认选项即可。

安装完成后,打开你的命令行工具(例如:Windows上的Command Prompt或PowerShell,macOS或Linux上的Terminal),输入以下命令:

git --version

如果命令行返回了Git的版本信息(例如 git version 2.30.0.windows.1),则说明Git已经成功安装。

2. 注册与配置代码托管平台账号(以Gitee为例)

虽然Git是本地工具,但通常我们会配合远程代码托管平台使用,如GitHub或Gitee(码云)。这些平台可以:

  1. 备份你的代码项目。
  2. 方便你与他人协作。
  3. 参与或下载网络上的开源项目。

由于GitHub在某些地区访问可能不稳定,这里我们推荐使用国内的代码托管平台Gitee (码云)open in new window。其基础的版本控制功能与GitHub类似。请先访问Gitee官网注册一个账号。

3. 创建远程仓库与本地配置

远程仓库是托管在服务器(如Gitee)上的项目副本。

在Gitee上创建远程仓库:

  1. 登录Gitee后,通常会有一个"新建仓库"或"+"号的按钮,点击它。
  2. 仓库名称:给你的项目起一个名字。
  3. 路径:通常会自动根据仓库名称生成,你也可以自定义。
  4. 是否开源:选择"公开"则任何人可见(成为开源项目),选择"私有"则仅自己或授权成员可见。对于个人笔记或未完成的项目,建议选择"私有"。
  5. 初始化仓库:可以选择添加.gitignore(指定哪些文件不纳入版本控制)、README.md(项目说明文件)等。初学者可以先创建一个空仓库,后续再添加这些文件。
  6. 点击"创建"按钮。

全局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公钥实现免密操作 (推荐): 为了避免每次与远程仓库交互(如pushclone私有仓库)时都输入用户名和密码,可以配置SSH密钥。

  1. 检查或生成SSH密钥:打开命令行工具输入:
    ssh-keygen -t rsa -b 4096 -C "你注册Gitee时使用的邮箱"
    
    按回车三次使用默认设置即可。如果提示已存在密钥,可以选择覆盖或使用现有密钥。
  2. 查看并复制公钥:SSH密钥对会生成在用户目录下的.ssh文件夹中(例如Windows上是 C:\Users\你的用户名\.ssh\,Linux/macOS上是 ~/.ssh/)。找到名为id_rsa.pub的文件,用文本编辑器打开它,复制其全部内容。这个.pub文件包含的是你的公钥。
  3. 在Gitee添加公钥
    • 登录Gitee。
    • 进入个人主页的"设置"菜单。
    • 找到"安全设置"下的"SSH公钥"选项。
    • 点击"添加公钥"或类似按钮。
    • "标题"可以任意填写,例如"我的笔记本电脑"。
    • 将刚才复制的id_rsa.pub文件内容粘贴到"公钥"文本框中。
    • 点击"确定"或"保存"。
  4. 验证:之后,当你通过SSH协议克隆或推送你的Gitee项目时,就不再需要输入密码了。确保克隆时使用的是SSH格式的URL (通常以git@开头),而不是HTTPS格式的URL。

5. 仓库的基本概念和操作

理解Git的工作流程,关键在于理解它的几个核心区域:

  1. 工作区 (Working Directory):你电脑上实际的项目文件夹,包含你当前能看到和编辑的文件。
  2. 暂存区 (Staging Area / Index):一个特殊的文件,位于.git目录中。它记录了你下次要提交哪些文件的哪些改动。你可以把它想象成一个"待提交清单"。
  3. 本地仓库 (Local Repository):也是.git目录的一部分,保存了项目的所有版本历史。当你执行git commit时,暂存区的内容会被永久记录到本地仓库中,形成一个新的版本快照。
  4. 远程仓库 (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的核心特性之一,它允许你偏离主线开发(通常是mastermain分支)去进行新功能开发、Bug修复等,而不会影响到主线的稳定性。

  1. 查看分支: git branch
    • 列出所有本地分支,当前所在分支会以星号*标记。默认情况下,新仓库只有一个master(或main)分支。
  2. 创建分支: git branch <分支名>
    • 例如: git branch dev 会创建一个名为dev的新分支,该分支基于你创建它时所在的当前分支。
  3. 切换分支: git checkout <分支名>git switch <分支名> (新版Git推荐)
    • 例如: git checkout dev 会将你的工作区切换到dev分支。之后你的修改和提交都将作用于dev分支。
  4. 创建并切换分支: git checkout -b <新分支名>
    • 这是创建分支和切换分支两个命令的快捷方式。例如 git checkout -b feature-xyz
  5. 合并分支:
    • 首先,切换到你想要并入更改的目标分支(例如 master):git checkout master
    • 然后,执行合并命令,将指定分支(例如 dev)的更改合并进来:git merge dev
    • 合并时可能会产生冲突(Conflict),需要手动解决后再提交。
  6. 删除本地分支: git branch -d <分支名> (小写d,安全删除,如果分支未合并会提示) 或 git branch -D <分支名> (大写D,强制删除)
  7. 删除远程分支:git push origin -d dev
  8. 本地分支推送到远程分支: git push origin <本地分支名>:<远程分支名>
    • 例如: git push origin dev:dev 会将本地的dev分支推送到远程origin,并在远程创建一个名为dev的分支(如果尚不存在)。如果远程分支名省略,通常默认为同名。
    • 如果是第一次推送一个新创建的本地分支,可以使用 git push -u origin <分支名>-u 参数会建立本地分支与远程分支的追踪关系。
  9. 拉取远程分支到本地并创建对应本地分支: git checkout -b <本地分支名> origin/<远程分支名>
    • 例如: git checkout -b dev origin/dev 会在本地创建一个名为dev的新分支,该分支会自动追踪远程origin仓库的dev分支,并切换到这个新创建的本地dev分支。

7. 版本回退与历史查看

Git记录了每一次提交,使得你可以方便地在不同版本间穿梭。

  1. 查看提交历史: git log

    • 显示从最近到最远的提交日志,包括提交哈希值(一长串字符,是每个提交的唯一ID)、作者、日期和提交说明。
    • git log --oneline:以更简洁的单行格式显示。
  2. 版本回退: git reset --hard <提交哈希值>

    • 将当前分支的HEAD指针、暂存区和工作区都重置到指定的 <提交哈希值> 对应的状态。注意:--hard参数会丢弃该提交之后的所有工作区和暂存区的未提交更改,以及后续的提交历史,请谨慎使用! 版本哈希值不需要写全,通常写前7位即可唯一识别。
    • 如果只是想撤销提交,但保留工作区的更改,可以使用 git reset --soft <提交哈希值>
    • 如果想撤销提交,保留工作区更改,并清空暂存区,可以使用 git reset --mixed <提交哈希值> (这是默认选项)。
  3. 查看命令记录 (引用日志): git reflog

    • 显示HEAD指针移动的记录,包括你执行过的commitresetcheckout等操作。这非常有用,特别是当你错误地使用了git reset --hard并想找回"丢失"的提交时,可以通过reflog找到之前的提交哈希值,然后再次reset回去。
  4. 撤销编辑区中的所有修改:

    1. git checkout -- .
    2. git checkout -- <文件名>

掌握了这些内容,就可以灵活使用Git管理自己的代码和文档了。