Git 是目前最常用的分布式版本控制工具,广泛应用于软件开发、团队协作、代码管理和项目发布中。无论是后端、前端、测试还是运维,只要涉及代码管理,基本都离不开 Git。


一、什么是 Git

Git 是一个版本控制工具,它可以帮助我们记录文件的变化。

简单来说,Git 可以做到:

  • 记录代码每一次修改
  • 查看历史版本
  • 恢复到之前的版本
  • 多人协作开发
  • 创建不同分支开发不同功能
  • 合并不同人的代码

比如你写了一个项目,今天完成了登录功能,明天完成了注册功能,后天发现注册功能写错了,这时 Git 就可以帮你回到之前的版本,或者查看每一次修改了什么内容。


二、Git 的基本工作区域

在学习 Git 命令之前,需要先理解 Git 的三个常见区域。

  • 工作区:你实际编写代码的目录
  • 暂存区:准备提交的修改
  • 本地仓库:真正保存版本记录的地方

一次标准的 Git 提交流程通常是:

修改文件
git add 添加到暂存区
git commit 提交到本地仓库
git push 推送到远程仓库

可以简单理解为:

工作区 -> 暂存区 -> 本地仓库 -> 远程仓库

三、Git 安装后基本配置

第一次使用 Git,通常需要配置用户名和邮箱。

1. 配置用户名

git config --global user.name "your_name"

2. 配置邮箱

git config --global user.email "your_email@example.com"

这里的用户名和邮箱会出现在提交记录中。

3. 查看配置

git config --list

4. 查看某一项配置

git config user.name
git config user.email

--global 表示全局配置,对当前用户的所有 Git 仓库生效。如果只想对当前项目生效,可以去掉 --global


四、创建 Git 仓库

1. 初始化本地仓库

进入项目目录后执行:

git init

执行后,当前目录会变成一个 Git 仓库,并生成一个隐藏目录:

.git

这个目录保存了 Git 的版本信息,不建议手动修改或删除。


2. 克隆远程仓库

如果项目已经存在于远程平台,例如 GitHub、GitLab 或 Gitee,可以使用:

git clone 仓库地址

示例:

git clone https://github.com/user/project.git

克隆完成后,本地会生成一个项目目录,并自动关联远程仓库。


五、查看仓库状态:git status

git status 是 Git 中最常用的命令之一,用于查看当前仓库文件状态。

git status

它可以告诉你:

  • 哪些文件被修改了
  • 哪些文件还没有被 Git 跟踪
  • 哪些文件已经添加到暂存区
  • 当前在哪个分支
  • 是否有内容可以提交

建议在执行 addcommitpush 等操作前,经常使用 git status 查看当前状态。


六、添加文件到暂存区:git add

1. 添加指定文件

git add index.html

2. 添加多个文件

git add index.html style.css

3. 添加当前目录下所有修改

git add .

git add . 很常用,它会把当前目录下新增、修改和删除的文件都添加到暂存区。

不过在使用前建议先执行:

git status

确认是否有不想提交的文件。


七、提交代码:git commit

1. 提交暂存区内容

git commit -m "完成登录功能"

-m 后面是提交说明,用于描述这次提交做了什么。

好的提交说明应该清晰明确,例如:

添加用户登录接口
修复订单金额计算错误
优化首页加载速度
修改数据库连接配置

不推荐写成:

update
test
fix
修改

因为这种提交说明很难看出具体改了什么。


2. 添加并提交已跟踪文件

git commit -am "修改用户信息校验逻辑"

这个命令相当于:

git add 已经被 Git 跟踪的文件
git commit -m "提交说明"

注意:git commit -am 只对已经被 Git 跟踪过的文件有效,对于新建文件无效。新建文件仍然需要先执行 git add


八、查看提交历史:git log

1. 查看完整提交历史

git log

2. 简洁查看历史

git log --oneline

示例:

a1b2c3d 添加登录功能
e4f5g6h 初始化项目

3. 图形化查看分支历史

git log --oneline --graph --all

这个命令在查看分支合并关系时非常有用。


九、查看文件差异:git diff

1. 查看工作区修改内容

git diff

这个命令可以查看当前工作区和暂存区之间的差异。

2. 查看暂存区内容

git diff --cached

也可以写成:

git diff --staged

表示查看已经 git add 但还没有 git commit 的内容。

3. 比较两个版本

git diff 版本1 版本2

示例:

git diff a1b2c3d e4f5g6h

十、撤销修改

Git 的撤销操作非常重要,但也需要谨慎使用。

1. 撤销工作区修改

如果文件还没有执行 git add,可以使用:

git checkout -- file.txt

或者较新的写法:

git restore file.txt

这会把文件恢复到最近一次提交或暂存区的状态。


2. 取消暂存

如果文件已经执行了 git add,但还没有提交,可以使用:

git reset HEAD file.txt

或者:

git restore --staged file.txt

这会把文件从暂存区移回工作区,文件内容不会丢失。


3. 修改最近一次提交说明

git commit --amend -m "新的提交说明"

适合刚提交完,发现提交说明写错的情况。

如果这次提交已经推送到远程仓库,修改提交历史可能会影响其他人,需要谨慎操作。


十一、删除文件

1. 删除文件并提交删除记录

git rm old.txt
git commit -m "删除无用文件"

2. 只从 Git 管理中删除,保留本地文件

git rm --cached config.yml

这个命令常用于误把配置文件、日志文件、编译产物提交到 Git 后,希望取消 Git 跟踪,但本地仍然保留文件。


十二、分支管理

分支是 Git 非常核心的功能。使用分支可以让我们在不影响主线代码的情况下开发新功能。

常见分支命名:

main / master:主分支
dev:开发分支
feature/login:登录功能分支
bugfix/order-error:修复订单错误分支
release/v1.0:发布分支

1. 查看分支

git branch

查看所有本地和远程分支:

git branch -a

2. 创建分支

git branch feature/login

3. 切换分支

git checkout feature/login

较新的写法:

git switch feature/login

4. 创建并切换分支

git checkout -b feature/login

较新的写法:

git switch -c feature/login

5. 合并分支

假设登录功能在 feature/login 分支开发完成,现在要合并到 dev 分支。

先切换到目标分支:

git switch dev

然后合并:

git merge feature/login

含义是:把 feature/login 分支的修改合并到当前 dev 分支。


6. 删除分支

删除已经合并的分支:

git branch -d feature/login

强制删除分支:

git branch -D feature/login

-D 会强制删除,即使分支内容还没有合并,也会删除,需要谨慎使用。


十三、远程仓库操作

远程仓库通常用于团队协作,例如 GitHub、GitLab、Gitee 等。

1. 查看远程仓库

git remote -v

2. 添加远程仓库

git remote add origin 仓库地址

示例:

git remote add origin https://github.com/user/project.git

origin 是远程仓库的默认名称,也可以使用其他名称。


3. 推送代码到远程仓库

第一次推送主分支:

git push -u origin main

如果主分支叫 master,则使用:

git push -u origin master

之后可以直接使用:

git push

-u 表示建立本地分支和远程分支的关联。


4. 拉取远程代码

git pull

git pull 会从远程仓库拉取最新代码,并尝试自动合并到当前分支。

完整写法:

git pull origin main

5. 获取远程更新但不合并

git fetch

git fetch 只会把远程更新下载到本地,不会自动合并代码。

简单理解:

git fetch:只下载远程更新
git pull:下载远程更新并自动合并

十四、解决代码冲突

多人协作时,如果两个人修改了同一个文件的同一部分,就可能产生冲突。

执行 git pullgit merge 后,如果出现冲突,文件中可能会出现这样的内容:

<<<<<<< HEAD
当前分支的代码
=======
被合并分支的代码
>>>>>>> feature/login

解决冲突的步骤:

1. 打开冲突文件
2. 手动修改为最终想要保留的代码
3. 删除 <<<<<<<、=======、>>>>>>> 标记
4. 执行 git add
5. 执行 git commit

示例:

git add conflict-file.txt
git commit -m "解决合并冲突"

解决冲突时,不要只看代码能不能保存,还要确认业务逻辑是否正确。


十五、版本回退

Git 可以把代码恢复到之前的版本。

1. 回退到上一个版本,保留工作区修改

git reset --soft HEAD~1

含义是:撤销最近一次提交,但修改内容仍然保留在暂存区。


2. 回退到上一个版本,保留文件修改但取消暂存

git reset --mixed HEAD~1

--mixed 是默认模式,所以也可以写成:

git reset HEAD~1

3. 回退到上一个版本并丢弃修改

git reset --hard HEAD~1

--hard 会直接丢弃修改,非常危险,使用前一定要确认当前代码是否还需要保留。


4. 回退到指定版本

先查看提交记录:

git log --oneline

然后执行:

git reset --hard 提交ID

示例:

git reset --hard a1b2c3d

5. 安全撤销某次提交:git revert

git revert 提交ID

git revert 不会删除历史记录,而是生成一次新的提交,用来抵消之前某次提交的修改。

简单区别:

git reset:移动版本指针,可能改写历史
git revert:新增一次反向提交,不改写历史

团队协作中,如果代码已经推送到远程仓库,通常更推荐使用 git revert


十六、暂存当前修改:git stash

有时候正在开发一个功能,突然需要切换分支修复 bug,但当前代码还没写完,不适合提交。这时可以使用 git stash

1. 暂存当前修改

git stash

2. 查看暂存列表

git stash list

3. 恢复最近一次暂存

git stash pop

pop 会恢复修改,并删除这条 stash 记录。

4. 恢复但保留 stash 记录

git stash apply

5. 删除 stash

git stash drop

十七、标签管理:git tag

标签常用于标记版本发布,例如 v1.0.0v2.1.3

1. 创建标签

git tag v1.0.0

2. 查看标签

git tag

3. 推送标签到远程

git push origin v1.0.0

推送所有标签:

git push origin --tags

4. 删除本地标签

git tag -d v1.0.0

5. 删除远程标签

git push origin --delete v1.0.0

十八、忽略文件:.gitignore

在项目中,有些文件不应该提交到 Git,例如:、

  • 日志文件
  • 临时文件
  • 编译产物
  • 依赖目录
  • 本地配置文件
  • IDE 配置文件

可以在项目根目录创建 .gitignore 文件。

示例:

# 日志文件
*.log

# Node.js 依赖
node_modules/

# Java 编译目录
target/

# Python 缓存
__pycache__/
*.pyc

# 本地环境配置
.env

# IDE 配置
.idea/
.vscode/

需要注意:.gitignore 只对还没有被 Git 跟踪的文件生效。

如果文件已经被提交过,需要先取消跟踪:

git rm --cached file.txt

然后再提交:

git commit -m "停止跟踪本地配置文件"

十九、常见开发流程

1. 第一次拉取项目

git clone 仓库地址
cd 项目目录

2. 开发新功能

git switch -c feature/login

修改代码后:

git status
git add .
git commit -m "添加登录功能"
git push -u origin feature/login

然后在 GitHub、GitLab 或 Gitee 上提交合并请求。


3. 更新本地代码

git switch main
git pull

如果使用开发分支:

git switch dev
git pull

4. 合并功能分支

git switch dev
git merge feature/login
git push

二十、常见问题和解决方法

1. 忘记添加文件就提交了

可以继续添加文件,然后修改最近一次提交:

git add missing-file.txt
git commit --amend

如果想直接修改提交信息:

git commit --amend -m "新的提交说明"

2. 提交到了错误分支

可以先保存当前提交,然后切到正确分支合并。

查看提交 ID:

git log --oneline

切换到正确分支:

git switch correct-branch

把错误分支上的某次提交复制过来:

git cherry-pick 提交ID

3. 本地代码太乱,想放弃所有修改

git reset --hard

如果还有未跟踪的新文件,可以清理:

git clean -fd

这两个命令都会丢弃本地修改,执行前一定要确认是否还有重要代码。


4. 推送失败,提示远程有更新

通常是因为远程仓库有别人提交的新代码,本地还没有同步。

可以先拉取:

git pull

解决可能出现的冲突后,再推送:

git push

二十一、Git 常用命令速查

# 初始化仓库
git init

# 克隆仓库
git clone 仓库地址

# 查看状态
git status

# 添加到暂存区
git add .
git add file.txt

# 提交代码
git commit -m "提交说明"

# 查看提交历史
git log
git log --oneline

# 查看差异
git diff
git diff --staged

# 查看分支
git branch
git branch -a

# 创建并切换分支
git switch -c feature/login

# 切换分支
git switch main

# 合并分支
git merge feature/login

# 删除分支
git branch -d feature/login

# 查看远程仓库
git remote -v

# 推送代码
git push
git push -u origin main

# 拉取代码
git pull

# 获取远程更新
git fetch

# 暂存修改
git stash

# 恢复暂存
git stash pop

# 创建标签
git tag v1.0.0

# 回退版本
git reset --soft HEAD~1
git reset --hard HEAD~1

# 安全撤销提交
git revert 提交ID

总结

Git 是开发中非常重要的工具,它可以帮助我们管理代码版本、追踪修改记录、多人协作开发以及快速回退错误代码。

Git 命令看起来很多,但日常开发中最常用的其实就是 statusaddcommitpushpullbranchswitchmerge。只要先掌握这些基础命令,再结合分支开发和远程协作场景练习,就可以满足大多数项目开发需求。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐