从入门到日常开发,一篇文章掌握 Git 核心操作

Git 常用命令大全

从入门到日常开发,一篇文章掌握 Git 核心操作

适合人群:Git 初学者、Java 后端学习者、第一次参与团队项目的开发者

大家好,我是 lazy,一名大二科班学生

文章简介

Git 是目前开发中最常用的分布式版本控制工具。它可以记录代码的每一次变化,让开发者能够查看历史版本、创建分支、多人协作,并在出现问题时恢复代码。很多初学者第一次接触 Git 时,会被 git add、git commit、git pull、git push 等命令弄得很混乱。其实,只要先理解 Git 的工作流程,再按照实际开发顺序学习,常用命令并不难。

本文以"创建仓库---修改代码---提交版本---分支开发---同步远程仓库"为主线,系统整理日常开发中最常见的 Git 命令。正文是文章的核心,配图只用于辅助理解关键流程。

本文内容

  • Git 的作用以及工作区、暂存区、本地仓库之间的关系
  • Git 初次配置、初始化仓库和克隆项目
  • 文件状态、添加、提交、查看历史和对比修改
  • 创建、切换、合并和删除分支
  • 关联远程仓库、拉取代码和推送代码
  • 撤销修改、取消暂存、版本回退和临时保存工作
  • 常见报错、实用开发流程和命令速查表

一、Git 是什么?

Git 是一种分布式版本控制系统。所谓"版本控制",可以理解为给项目建立一套完整的修改记录。每次完成一个阶段的开发后,都可以把当前代码保存成一个版本。以后无论是查看谁修改了代码、比较两个版本的差异,还是把代码恢复到之前的状态,都可以通过 Git 完成。

Git 与普通文件备份最大的不同,是它不会要求我们手动复制"项目最终版""项目最终版2""项目真的最终版"等文件夹。Git 会用提交记录管理版本,每次提交都有唯一的编号、提交时间和说明,查找历史更加清晰。

Git 能解决哪些问题?

  • 记录项目中每一次有意义的代码修改。
  • 查看某个文件在不同版本之间发生了哪些变化。
  • 出现严重错误时恢复到之前的稳定版本。
  • 通过分支同时开发多个功能,避免相互影响。
  • 将代码推送到 GitHub、Gitee 或公司 GitLab,实现备份和团队协作。

二、先理解 Git 的三个核心区域

学习 Git 命令之前,必须先理解工作区、暂存区和本地仓库。很多初学者觉得 Git 命令混乱,根本原因就是没有分清代码当前位于哪个区域。

1. 工作区(Working Tree)

工作区就是我们平时在 IDEA、VS Code 或其他编辑器中打开的项目目录。新建文件、修改代码、删除文件等操作,首先都会发生在工作区。

2. 暂存区(Staging Area)

暂存区用于选择"本次准备提交哪些修改"。执行 git add 后,文件的当前状态会进入暂存区,但这时还没有真正形成一个版本。

3. 本地仓库(Repository)

执行 git commit 后,暂存区中的内容会保存到本地仓库,形成一次正式提交。每一次提交都可以看作项目的一个历史版本。

图 1 工作区、暂存区和本地仓库的关系

因此,最基本的 Git 操作顺序可以记为:先在工作区修改文件,再使用 git add 放入暂存区,最后使用 git commit 保存到本地仓库。

bash 复制代码
修改代码  →  git add .  →  git commit -m "提交说明"

三、安装后的第一次配置

安装 Git 后,建议先配置用户名和邮箱。这些信息会记录在每一次提交中,用于标识提交者。

1. 查看 Git 版本

bash 复制代码
git --version

如果命令能够正常输出版本号,说明 Git 已经安装成功,并且环境变量基本配置正确。

2. 配置用户名和邮箱

bash 复制代码
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"

其中 --global 表示全局配置,通常一台电脑配置一次即可。之后创建的仓库会默认使用这组信息。

3. 查看当前配置

bash 复制代码
git config --list

# 单独查看用户名和邮箱
git config user.name
git config user.email

|-----------------------------------------------------------------------|
| 注意:用户名不一定必须与 GitHub 或 Gitee 的昵称完全相同,但邮箱最好填写平台账号绑定的邮箱,这样平台更容易正确识别提交记录。 |

四、创建或获取 Git 仓库

1. 将本地项目初始化为 Git 仓库

bash 复制代码
cd 项目目录
git init

执行成功后,项目目录中会生成一个名为 .git 的隐藏文件夹。该目录保存提交记录、分支信息和仓库配置,不要随意删除或修改。

2. 克隆已有的远程项目

bash 复制代码
git clone 远程仓库地址

# 示例
git clone https://github.com/example/demo.git

git clone 会把远程仓库的代码、提交历史和分支信息复制到本地。加入已有项目时,一般使用克隆命令,而不是先 git init 再手动复制代码。

3. 指定克隆后的文件夹名称

bash 复制代码
git clone 远程仓库地址 本地文件夹名称

五、查看文件状态:git status

git status 用于查看工作区和暂存区的状态,是日常开发中使用频率最高的命令之一。建议在提交前后都执行一次。

bash 复制代码
git status

常见状态包括:

  • Untracked files:未被 Git 跟踪的新文件。
  • Changes not staged for commit:文件已经修改,但还没有加入暂存区。
  • Changes to be committed:文件已经进入暂存区,等待提交。
  • nothing to commit, working tree clean:当前没有未提交的修改。

使用简洁模式

bash 复制代码
git status -s

简洁模式会使用字母标记状态,例如 M 表示修改,A 表示新增,D 表示删除,?? 表示未跟踪文件。

六、把修改加入暂存区:git add

1. 添加单个文件

bash 复制代码
git add Main.java

2. 添加多个指定文件

bash 复制代码
git add Main.java UserService.java README.md

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

bash 复制代码
git add .

git add . 会把当前目录及其子目录中的新增、修改和删除加入暂存区,是最常用的写法。

4. 只添加某个目录

bash 复制代码
git add src/

|--------------------------------------------------------------------------------------|
| 建议:不要养成不检查就直接 git add . 的习惯。提交前先执行 git status 和 git diff,确认没有把日志、密码配置、编译产物或无关文件一起提交。 |

七、提交代码:git commit

当需要提交的修改已经进入暂存区后,使用 git commit 创建一个正式版本。

1. 最常用的提交方式

bash 复制代码
git commit -m "完成用户登录功能"

引号中的内容是提交说明。良好的提交说明应该简洁说明"这次做了什么",而不是只写 update、修改代码或 test。

2. 推荐的提交说明示例

bash 复制代码
git commit -m "新增商品分页查询接口"
git commit -m "修复订单金额计算精度问题"
git commit -m "优化 Redis 缓存失效逻辑"

3. 跳过暂存步骤提交已跟踪文件

bash 复制代码
git commit -am "修复已跟踪文件中的问题"

该命令只会提交已经被 Git 跟踪的文件,无法自动包含新建的未跟踪文件。初学阶段建议继续使用 git add 和 git commit 两步操作,更容易理解。

八、查看修改和提交历史

1. 查看工作区尚未暂存的修改

bash 复制代码
git diff

2. 查看已经暂存、即将提交的修改

bash 复制代码
git diff --staged

3. 查看完整提交历史

bash 复制代码
git log

4. 单行显示提交历史

bash 复制代码
git log --oneline

5. 图形化查看分支历史

bash 复制代码
git log --oneline --graph --all --decorate

该命令会把提交、分支和合并关系显示在同一张文本图中,非常适合排查分支历史。

6. 查看某次提交的详细内容

bash 复制代码
git show 提交ID

提交 ID 不一定要输入完整字符串,只要输入的前几位能够唯一识别该提交即可。

九、分支管理

分支可以理解为一条独立的开发线路。开发新功能时,可以从主分支创建一个新分支,在新分支中修改代码。功能完成并测试通过后,再把它合并回主分支。这样可以避免未完成的代码影响稳定版本。

图 2 在开发分支完成工作后合并回主分支

1. 查看本地分支

bash 复制代码
git branch

分支名称前带有 * 的分支,是当前所在分支。

2. 创建新分支

git branch dev

3. 切换分支

bash 复制代码
git switch dev

旧版教程中经常使用 git checkout dev。现在切换分支更推荐使用语义更清晰的 git switch。

4. 创建并立即切换到新分支

bash 复制代码
git switch -c feature-login

5. 合并分支

bash 复制代码
# 先切换到接收代码的分支
git switch main

# 再合并开发分支
git merge feature-login

6. 删除已经合并的分支

bash 复制代码
git branch -d feature-login

7. 强制删除未合并分支

bash 复制代码
git branch -D feature-login

|----------------------------------------------|
| 注意:强制删除可能导致该分支中尚未合并的提交难以找回,使用前一定要确认分支内容不再需要。 |

十、远程仓库操作

本地仓库只能保存在自己的电脑中。关联 GitHub、Gitee 或 GitLab 等远程仓库后,可以备份代码并与团队成员协作。

图 3 本地仓库与远程仓库之间的推送和拉取

1. 查看远程仓库信息

bash 复制代码
git remote -v

2. 关联远程仓库

bash 复制代码
git remote add origin 远程仓库地址

origin 是远程仓库的默认别名,也可以使用其他名称,但大多数项目都会使用 origin。

3. 修改远程仓库地址

bash 复制代码
git remote set-url origin 新的远程仓库地址

4. 第一次推送主分支

bash 复制代码
git push -u origin main

-u 会建立本地 main 与远程 main 的跟踪关系。建立后,后续通常只需执行 git push。

5. 推送当前分支

bash 复制代码
git push

6. 拉取并合并远程最新代码

bash 复制代码
git pull

git pull 可以理解为先获取远程更新,再把更新合并到当前分支。团队开发中,推送前通常需要先拉取最新代码。

7. 只获取远程更新,不立即合并

bash 复制代码
git fetch

git fetch 更安全,因为它不会直接修改当前工作区。获取后可以先查看差异,再决定是否合并。

十一、撤销修改与版本恢复

Git 的撤销命令作用范围不同。使用前一定要先确认修改位于工作区、暂存区还是已经提交到仓库。

1. 撤销工作区中尚未暂存的修改

bash 复制代码
git restore 文件名

# 撤销当前目录所有未暂存修改
git restore .

该操作会丢弃工作区中的修改,通常无法通过普通方式恢复,执行前要确认这些内容确实不需要。

2. 将文件从暂存区移回工作区

bash 复制代码
git restore --staged 文件名

文件内容不会消失,只是取消"准备提交"的状态。

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

bash 复制代码
git commit --amend -m "新的提交说明"

4. 回退到某个历史版本

bash 复制代码
git reset --soft 提交ID
git reset --mixed 提交ID
git reset --hard 提交ID

三种模式的区别如下:

  • --soft:移动提交位置,但保留暂存区和工作区内容。
  • --mixed:移动提交位置,清空暂存区,但保留工作区内容,是默认模式。
  • --hard:提交记录、暂存区和工作区都回退,未保存修改可能永久丢失。

|---------------------------------------------------------------------------|
| 团队项目建议:已经推送到公共远程仓库的提交,不建议随意使用 reset 改写历史。更安全的做法通常是使用 git revert 创建一次反向提交。 |

5. 安全撤销某次提交

bash 复制代码
git revert 提交ID

git revert 不会删除历史记录,而是新增一次提交来抵消目标提交的修改,因此更适合已经共享给其他成员的分支。

十二、临时保存未完成工作:git stash

有时正在开发一个功能,突然需要切换分支修复紧急问题,但当前代码还不适合提交。这时可以使用 git stash 临时保存工作区和暂存区的修改。

1. 临时保存当前修改

bash 复制代码
git stash

2. 保存时添加说明

bash 复制代码
git stash push -m "登录功能开发到一半"

3. 查看暂存列表

bash 复制代码
git stash list

4. 恢复最近一次暂存并删除记录

bash 复制代码
git stash pop

5. 恢复但保留暂存记录

bash 复制代码
git stash apply

6. 删除某条暂存记录

bash 复制代码
git stash drop stash@{0}

十三、标签管理

标签常用于标记正式版本,例如 v1.0.0、v2.1.0。与普通分支不同,标签一般固定指向某次提交。

1. 查看标签

bash 复制代码
git tag

2. 创建带说明的标签

bash 复制代码
git tag -a v1.0.0 -m "第一个正式版本"

3. 推送单个标签

bash 复制代码
git push origin v1.0.0

4. 推送全部标签

bash 复制代码
git push origin --tags

十四、.gitignore:忽略不需要提交的文件

.gitignore 文件用于告诉 Git 哪些文件不需要跟踪。常见的忽略对象包括编译产物、IDE 配置、日志、临时文件以及包含密码的本地配置文件。

bash 复制代码
# Java 编译产物
*.class
target/

# IDEA 配置
.idea/
*.iml

# 日志文件
*.log
logs/

# 本地敏感配置
application-local.yml

如果某个文件已经被 Git 跟踪,后来才加入 .gitignore,Git 仍会继续跟踪它。需要先取消跟踪:

bash 复制代码
git rm --cached 文件名

十五、团队开发中的常用操作流程

下面是一套适合初学者的简单团队开发流程。实际公司项目可能还会配合代码评审和 Pull Request,但基本思路相同。

步骤 1:拉取主分支最新代码

bash 复制代码
git switch main
git pull

步骤 2:创建功能分支

bash 复制代码
git switch -c feature-user-login

步骤 3:开发并检查修改

bash 复制代码
git status
git diff

步骤 4:添加并提交

bash 复制代码
git add .
git commit -m "完成用户登录功能"

步骤 5:推送功能分支

bash 复制代码
git push -u origin feature-user-login

步骤 6:通过平台发起合并请求

在 GitHub、Gitee 或 GitLab 页面创建 Pull Request / Merge Request,完成代码评审后合并到主分支。

十六、常见问题与解决方法

问题 1:执行 git push 被拒绝

常见原因是远程分支已经有新提交,而本地没有这些提交。可以先拉取再推送:

bash 复制代码
git pull --rebase
git push

使用 --rebase 可以减少不必要的合并提交,但如果已经发生复杂冲突,初学者应先确认团队的处理规范。

问题 2:出现合并冲突

当本地和远程修改了同一文件的同一部分时,Git 无法自动判断应该保留哪一份内容,会在文件中加入冲突标记。处理步骤通常是:

  • 打开冲突文件,手动决定保留哪些代码。
  • 删除 <<<<<<<、=======、>>>>>>> 等冲突标记。
  • 重新测试代码,确认功能正常。
  • 执行 git add .,然后完成提交。

问题 3:提示 not a git repository

说明当前目录不是 Git 仓库。检查是否进入了正确的项目目录,或者是否已经执行 git init / git clone。

问题 4:文件已经加入 .gitignore 仍然被提交

说明该文件在加入忽略规则之前已经被跟踪。可以使用 git rm --cached 文件名 取消跟踪,再重新提交。

十七、Git 常用命令速查表

|--------|-------------------------|----------------|
| 功能 | 命令 | 作用 |
| 查看版本 | git --version | 检查 Git 是否安装成功 |
| 初始化仓库 | git init | 把当前目录变成 Git 仓库 |
| 克隆仓库 | git clone 地址 | 下载远程项目 |
| 查看状态 | git status | 查看文件所处状态 |
| 添加全部修改 | git add . | 加入暂存区 |
| 提交代码 | git commit -m "说明" | 形成一个本地版本 |
| 查看历史 | git log --oneline | 简洁显示提交记录 |
| 查看差异 | git diff | 查看尚未暂存的修改 |
| 查看分支 | git branch | 列出本地分支 |
| 创建并切换 | git switch -c 分支名 | 开始新功能开发 |
| 合并分支 | git merge 分支名 | 把目标分支合入当前分支 |
| 查看远程 | git remote -v | 显示远程地址 |
| 拉取代码 | git pull | 获取并合并远程更新 |
| 推送代码 | git push | 将本地提交同步到远程 |
| 取消暂存 | git restore --staged 文件 | 从暂存区移回工作区 |
| 撤销修改 | git restore 文件 | 丢弃未暂存修改 |
| 临时保存 | git stash | 临时保存未完成工作 |

十八、总结

Git 的命令虽然很多,但日常开发真正高频使用的只有一部分。初学时不需要一次记住所有命令,最重要的是理解"工作区---暂存区---本地仓库---远程仓库"的流转关系。

最基础的一套操作是:使用 git status 查看状态,使用 git add . 添加修改,使用 git commit 保存版本,再使用 git pull 和 git push 与远程仓库同步。掌握这条主线后,再逐步学习分支、撤销、stash 和标签,就能够应对大多数个人开发与团队协作场景。

bash 复制代码
git status
git add .
git commit -m "提交说明"
git pull
git push

建议在真实项目中多练习,并在执行 reset --hard、restore 或强制推送等可能丢失数据的命令前,先确认当前修改是否已经备份。

相关推荐
zzqssliu9 小时前
煤炉自动代拍系统的队列设计与超时控制机制
git·github
一支绝命钩9 小时前
FPGA工程Git常用操作手册
git
GetcharZp9 小时前
抛弃低效SSH!这套Ansible+Web可视化神器,让你天天准点下班!
后端
fthux11 小时前
“装闭”,让装修套路“装”不下去
人工智能·ai·开源·github·open source
weixin_4462608512 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
a11177612 小时前
2FA 验证码生成器(github登录验证 app)
笔记·学习
我的xiaodoujiao13 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest
不搞学术柒柒13 小时前
Git新功能完整开发提交流程
git