Table of Contents
一、Git简介
1.1 什么是Git
Git是一个开源的分布式版本控制系统,主要用于管理项目文件的修改历史。在软件开发过程中,开发人员可以使用Git记录代码的不同版本,查看文件的修改情况,并在需要时恢复到之前的版本。
例如,在开发一个项目时,我们可能会不断修改代码。如果某次修改导致程序出现问题,仅依靠手动备份很难准确找到之前的版本。使用Git后,每次完成一项工作都可以创建一次提交,记录当前的修改内容,方便后续查看和管理。
Git除了可以用于个人开发,也支持多人协同开发。团队成员可以分别进行开发,再将各自完成的代码合并到项目中。
Git是目前世界上最先进的分布式版本控制系统。
1.2 Git与GitHub、Gitee的区别
初次接触Git时,经常会看到GitHub、Gitee等名称。它们之间的关系如下。
| 名称 | 说明 |
|---|---|
| Git | 分布式版本控制工具,负责管理代码版本 |
| GitHub | 基于Git的代码托管与协作平台,全球规模最大的软件源代码托管与协作开发平台 |
| Gitee | 中国版github |
Git可以独立运行,不依赖GitHub或Gitee。开发人员可以在本地使用Git管理项目,之后再将代码上传到远程仓库。
在团队开发中,通常由Git负责版本管理,由GitHub、Gitee等平台负责远程代码托管和协作。
1.3 Git的基本工作原理
Git 的日常操作主要涉及工作区、暂存区、本地仓库和远程仓库。
- 工作区(Working Directory):存放项目文件的目录,开发人员平时编写和修改代码的地方。
- 暂存区(Staging Area):用于记录下一次提交准备包含的修改。
- 本地仓库(Local Repository):保存已经提交的版本历史。
- 远程仓库(Remote Repository):存放在远程服务器上的仓库,供团队成员共享代码。
它们之间的基本关系如下:

当需要获取其他成员的最新代码时,可以使用git pull将远程更新获取并整合到当前分支。
需要注意,git add、git commit和git push是三个不同的操作,分别对应暂存修改、创建本地提交和推送提交到远程仓库,下面会有详细解释。
二、Git的安装与配置
2.1 Windows系统安装
Git 官方下载地址:
进入下载页面后,选择Windows对应的安装程序。下载完成后运行安装程序,一般使用默认选项即可完成安装。
安装完成后,可以在开始菜单中找到Git Bash,也可以在cmd中执行命令。
打开Git Bash,输入以下命令:
git --version
如果终端输出类似下面的内容,说明 Git 已经安装成功:
git version 2.x.x
实际显示的版本号可能不同。
2.2 配置用户名和邮箱
安装完成后,需要配置Git的提交者信息。
# 配置用户名
git config --global user.name "Your Name"
# 配置邮箱
git config --global user.email "your@example.com"
将示例中的用户名和邮箱替换为自己的信息即可,这里的用户名和邮箱用于标识提交记录中的提交者。
其中,--global表示配置对当前操作系统用户下的所有Git仓库生效。如果只想对当前项目进行配置,可以进入项目目录后执行:
git config user.name "Your Name"
git config user.email "your@example.com"
查看当前配置:
git config --list
至此,Git的基本安装和配置就完成了。
三、Git的基础使用
本节以一个简单的项目为例,介绍如何使用 Git 创建仓库、提交修改和查看版本历史。
3.1 创建本地仓库
首先创建一个项目目录,并进入该目录:
mkdir git-demo
cd git-demo
在目录中创建一个README.md文件,写入一些项目说明。
接着执行:
git init
该命令会在当前目录初始化一个Git仓库,并创建用于保存仓库数据的.git目录。
可以使用以下命令查看当前仓库的状态:
git status
由于README.md尚未被Git跟踪,通常会显示为未跟踪文件。
3.2 将文件添加到暂存区
Git不会因为文件发生变化就自动创建提交,需要先将准备提交的修改添加到暂存区。
添加指定文件:
git add README.md
添加当前目录下符合规则的修改:
git add .
添加完成后,可以再次执行:
git status
此时,文件会显示为已经暂存、等待提交的状态。
如果想查看已经暂存的具体修改,可以执行:
git diff --staged
这有助于在提交之前检查代码,避免把不需要的修改一起提交。
3.3 提交修改
文件添加到暂存区后,可以执行git commit创建一次提交。
git commit -m "初始化项目"
其中,-m用于直接指定提交说明。
提交完成后,Git会将暂存区中的修改记录到本地仓库,形成一个新的版本记录。
在实际开发中,建议每次提交尽量围绕一项相对独立的工作。例如:
git commit -m "新增用户登录功能"
git commit -m "修复用户信息查询问题"
git commit -m "更新项目说明文档"
清晰的提交说明可以帮助开发人员快速了解每次修改的目的。
3.4 查看文件修改
Git提供了多个命令用于检查项目状态和修改内容。
# 查看当前仓库状态
git status
# 查看工作区中尚未暂存的修改
git diff
# 查看暂存区中的修改
git diff --staged
其中,git status是日常使用频率较高的命令。执行提交、切换分支或者处理冲突之前,都可以先通过它确认当前仓库的状态。
3.5 查看提交历史
查看完整的提交历史:
git log
如果只需要查看简洁的提交记录,可以使用:
git log --oneline
输出内容通常包括提交 ID 和提交说明。例如:
a1b2c3d 更新项目说明文档
e4f5g6h 修复用户信息查询问题
i7j8k9l 初始化项目
这里的提交ID仅用于演示。
如果需要查看某次提交具体修改了什么,可以执行:
git show 提交ID
通过这些命令,可以了解项目的修改历史,并在出现问题时定位相关提交。
3.6 配置.gitignore
项目中存在一些文件,通常不需要纳入版本管理,例如日志文件、编译产物和本地环境配置。
可以在项目根目录创建.gitignore文件,配置需要忽略的内容。
例如:
# 日志文件
*.log
# Python 缓存
__pycache__/
*.pyc
# Python 虚拟环境
.venv/
# 本地环境配置
.env
.gitignore主要用于忽略尚未被Git跟踪的文件。对于已经纳入版本管理的文件,新增忽略规则并不会自动停止跟踪。
另外,密码、访问令牌和私钥等敏感信息不应提交到代码仓库中。
同时,nodejs依赖,python的虚拟环境等均不应该提交到git。
3.7 常用命令汇总
| 命令 | 作用 |
|---|---|
git init |
初始化本地仓库 |
git clone 仓库地址 |
克隆远程仓库 |
git status |
查看仓库状态 |
git add 文件名 |
将指定文件的修改添加到暂存区 |
git add . |
暂存当前目录下的修改 |
git commit -m "说明" |
创建提交 |
git diff |
查看未暂存的修改 |
git log --oneline |
查看简洁提交历史 |
git restore 文件名 |
丢弃指定文件尚未暂存的修改 |
git restore --staged 文件名 |
将文件移出暂存区 |
git branch |
查看本地分支 |
git switch 分支名 |
切换分支 |
git pull |
获取并整合远程更新 |
git push |
推送本地提交 |
其中,git restore 文件名会丢弃该文件尚未暂存的修改,使用前需要确认这些修改不再需要。
四、Git远程仓库的使用
实际开发中,项目通常需要托管到远程仓库,以便多人共享代码。下面介绍如何获取远程项目,以及如何将本地代码上传到远程仓库。
4.1 克隆远程仓库
如果团队已经创建了远程仓库,可以使用git clone将项目下载到本地。
git clone 仓库地址
例如:
git clone https://github.com/example/project.git
这里的地址仅为示例,需要替换为团队实际使用的仓库地址。
克隆完成后,进入项目目录:
cd project
通过克隆获取的项目通常已经配置好远程仓库信息,可以直接进行后续开发。
4.2 关联远程仓库
如果已经在本地创建了仓库,现在希望将它关联到一个新建的空远程仓库,可以执行:
git remote add origin 远程仓库地址
其中,origin是常用的远程仓库名称。
查看远程仓库配置:
git remote -v
如果本地项目尚未提交过代码,可以先完成第一次提交,再推送到远程仓库。
例如:
git add .
git commit -m "初始化项目"
git branch -M main
git push -u origin main
这里假设远程仓库为空,并且当前项目适合将main作为主分支。如果远程仓库已经存在提交,应先确认本地和远程的历史关系,不要直接照搬初始化流程。
4.3 获取远程更新
当其他成员已经向远程仓库推送了新的代码时,可以执行:
git pull
该命令会获取远程更新,并尝试将其整合到当前分支。如果出现冲突,需要进一步处理。
在多人开发中,建议开始工作前先同步最新代码,避免基于过时的版本进行开发。
4.4 推送本地代码
完成代码修改并创建本地提交后,可以使用:
git push
将本地提交推送到对应的远程分支。
如果是首次推送一个新分支,通常需要指定远程仓库和分支名称:
git push -u origin 分支名
执行成功后,远程仓库就可以看到该分支上的提交。
需要注意,只有已经提交到本地仓库的修改才能通过普通的git push推送到远程仓库。尚未提交的工作区修改不会自动上传。
五、Git多人协作开发
多人协作是Git在项目开发中的重要应用场景。团队成员需要在共享项目的基础上分别开发,再通过分支和合并操作将代码整合起来。
5.1 为什么需要分支
假设一个项目需要同时开发登录功能和用户信息管理功能。如果所有成员都直接在同一个主分支上修改代码,就容易出现代码相互影响、修改难以区分等问题。
Git 提供了分支机制,可以让不同成员在独立的分支上进行开发。
常见的分支命名方式如下:
| 分支名称 | 用途 |
|---|---|
main |
主分支,保存经过验证的项目代码 |
feature/login |
开发登录功能 |
feature/user |
开发用户信息功能 |
fix/login-error |
修复登录相关问题 |
具体的分支命名可以由团队自行约定。关键在于让不同任务的代码修改相对独立,便于管理和审查。
5.2 创建和切换分支
查看当前本地分支:
git branch
创建并切换到一个新分支:
git switch -c feature/login
如果分支已经存在,可以直接切换:
git switch main
在新分支中完成的提交不会自动进入main分支。只有在后续进行合并或其他整合操作时,这些修改才会进入目标分支。
5.3 推荐的团队开发流程
对于刚开始使用Git的团队,可以采用功能分支配合合并请求的方式进行开发。
假设团队已经有一个远程项目,主分支为main,某位成员需要开发登录功能,可以按照以下步骤进行。
第一步:同步主分支
git switch main
git pull --ff-only origin main
这里假设本地main已经与远程主分支保持对应关系,并且当前工作区没有需要另外处理的修改。
--ff-only表示只允许快进更新。如果本地分支与远程分支已经发生分叉,命令会停止,而不是自动创建合并提交。
第二步:创建功能分支
git switch -c feature/login
后续与登录功能相关的代码修改都在这个分支中完成。
第三步:修改并提交代码
完成一部分功能后,可以先检查修改内容:
git status
git diff
确认没有问题后,再进行提交:
git add .
git commit -m "feat: add login feature"
提交说明一般是:代码更改类型+详细变更,如feat: add sth.,feat代表新增,add sth就是对这个新增的说明,这个后续会单独说
第四步:推送功能分支
git push -u origin feature/login
推送成功后,远程仓库中就会出现feature/login分支。
第五步:创建合并请求
在Git平台上创建Pull Request或Merge Request,将feature/login合并到main。
团队成员可以检查代码修改、讨论实现方式,并在必要时要求补充测试。确认符合要求后,再完成合并。
第六步:同步合并后的代码
合并完成后,开发人员可以切换回主分支并获取最新代码:
git switch main
git pull --ff-only origin main
至此,一项功能从开发到合并的基本流程就完成了。
5.4 多人开发时需要注意的问题
在团队开发过程中,建议遵循以下约定:
- 开始新任务前,先同步主分支的最新代码。
- 不同功能尽量使用不同分支,避免所有人直接修改主分支。
- 每次提交尽量对应一项相对独立的工作。
- 推送代码前,检查修改内容,确保没有误提交临时文件或敏感信息。
- 合并前进行代码审查,必要时运行测试。
- 不随意使用强制推送或重置共享分支历史的命令。
这些约定能够减少代码冲突,也便于后续定位问题。
5.5 代码冲突的处理
当不同分支修改了同一文件中的相同部分时,Git 有时无法自动完成合并,就会产生代码冲突。
例如,两个分支分别将同一行代码修改为不同内容,合并时可能出现以下标记:
<<<<<<< HEAD
message = "Hello"
=======
message = "Welcome"
>>>>>>> feature/login
其中,<<<<<<<、=======和>>>>>>>用于标记发生冲突的不同内容。
处理冲突时,需要先理解双方修改的目的,再确定最终应该保留的代码。解决后删除冲突标记,并检查程序是否能够正常运行。
如果当前执行的是普通合并,可以使用以下命令标记冲突已经解决:
git add 冲突文件名
git status
随后根据Git的提示完成合并。如果冲突发生在变基过程中,则应按照变基流程继续处理。
需要注意,代码冲突不一定意味着某一方写错了代码。它通常只是说明Git无法自动判断如何整合两边的修改,最终仍然需要开发人员根据实际业务逻辑进行确认。
六、总结
Git的基础使用主要包括本地版本管理、远程仓库操作和分支协作三个部分。
对于初学者,首先需要掌握git init、git add、git commit、git status等基础命令,理解工作区、暂存区和本地仓库之间的关系。在此基础上,再学习远程仓库的克隆、拉取和推送,最后通过分支与合并请求参与多人协作。
在实际开发中,Git不仅用于保存代码,还承担着记录修改历史、隔离开发任务和整合团队成果的作用。熟悉这些基本操作后,就可以在日常项目中逐步形成规范的版本管理习惯。
Warning: Undefined variable $fields in /www/wwwroot/www.itxcjm.top/wp-content/themes/kratos-pjax-master/comments.php on line 46