1. Git入门:为什么每个开发者都需要版本控制
刚接触编程那会儿,我最头疼的就是代码管理。有一次不小心删错了文件,花了两天时间才手动恢复。直到遇到Git,才发现原来代码版本管理可以这么高效。Git作为目前最流行的分布式版本控制系统,已经成为开发者必备的核心技能之一。
对于后端开发者而言,Git尤为重要。无论是个人项目还是团队协作,Git都能帮你:
- 完整记录每次代码变更
- 轻松回溯到任意历史版本
- 高效管理分支和合并
- 与团队成员无缝协作
这个教程专为后端新手设计,我会从最基础的安装配置讲起,逐步深入到日常开发中最常用的20+个Git命令,最后附上精心整理的速查表。学完这些,你就能应对90%的日常开发场景。
2. Git环境搭建与基础配置
2.1 安装Git的三种方式
根据操作系统不同,Git的安装方式也有所区别:
Windows系统:
- 官网下载安装包(推荐使用64-bit Git for Windows Setup)
- 安装时勾选"Use Git from Git Bash only"(保持环境纯净)
- 建议添加Git到PATH环境变量(方便在任意位置使用)
macOS系统:
- 最简单的方式是通过Homebrew:
brew install git - 也可以下载官方安装包
- 最简单的方式是通过Homebrew:
Linux系统:
- Debian/Ubuntu:
sudo apt-get install git - CentOS/RHEL:
sudo yum install git
- Debian/Ubuntu:
安装完成后,在终端运行git --version验证是否成功。
2.2 必须做的初始配置
安装完Git后,第一件事就是配置用户信息:
git config --global user.name "你的名字" git config --global user.email "你的邮箱"这个信息会记录在你的每次提交中。建议使用与GitHub/GitLab相同的邮箱,方便平台关联你的提交。
其他实用配置:
# 设置默认编辑器为VSCode git config --global core.editor "code --wait" # 让命令行输出带颜色 git config --global color.ui auto # 设置默认分支名为main(替代原来的master) git config --global init.defaultBranch main提示:所有配置都保存在
~/.gitconfig文件中,可以直接编辑这个文件修改配置。
3. Git核心概念与工作流程
3.1 Git的三大区域
理解Git的工作机制,首先要掌握三个核心概念:
- 工作目录(Working Directory):你实际操作的文件夹,在这里修改文件
- 暂存区(Staging Area):准备提交的变更临时存放区
- 仓库(Repository):存储项目完整历史和元数据的数据库
典型的工作流程是: 修改文件 → 添加到暂存区 → 提交到仓库
3.2 Git文件生命周期
文件在Git中的状态变化:
- 未跟踪(Untracked):新创建的文件,Git尚未开始跟踪
- 已修改(Modified):已跟踪文件被修改但未暂存
- 已暂存(Staged):修改已添加到暂存区,准备提交
- 已提交(Committed):变更已永久存储在本地仓库
使用git status可以查看当前文件状态,这是最常用的命令之一。
4. 日常开发必备Git命令详解
4.1 仓库初始化与克隆
创建新仓库:
mkdir my-project cd my-project git init这会在当前目录创建.git子目录,包含所有仓库数据。
克隆现有仓库:
git clone https://github.com/user/repo.git git clone https://github.com/user/repo.git my-folder # 指定本地目录名4.2 基础工作流命令
查看状态:
git status git status -s # 简洁版输出添加文件到暂存区:
git add file.txt # 添加单个文件 git add . # 添加所有变更 git add *.js # 添加所有js文件提交变更:
git commit -m "描述性提交信息" git commit -am "描述信息" # 跳过git add步骤(仅对已跟踪文件有效)提交信息规范:
- 首行不超过50字符的简要说明
- 空一行后写详细说明(如果需要)
- 使用现在时态、命令式语气(如"Fix bug"而非"Fixed bug")
4.3 查看历史与差异
查看提交历史:
git log git log --oneline # 简洁版 git log --graph --all --decorate # 可视化分支 git log -p file.txt # 查看特定文件历史查看变更内容:
git diff # 工作目录与暂存区的差异 git diff --staged # 暂存区与最新提交的差异 git diff HEAD~3 HEAD # 比较两个提交间的差异
4.4 撤销与回退
撤销工作目录修改:
git checkout -- file.txt # 丢弃指定文件的修改 git restore file.txt # Git 2.23+推荐方式从暂存区移除文件:
git reset HEAD file.txt git restore --staged file.txt # Git 2.23+推荐方式修改最后一次提交:
git commit --amend # 修改提交信息或内容回退到历史版本:
git reset --hard HEAD~3 # 回退3个提交(慎用!会丢失工作) git revert HEAD # 创建新提交来撤销之前的变更(更安全)
4.5 分支管理
创建与切换分支:
git branch feature-x # 创建分支 git checkout feature-x # 切换分支 git checkout -b feature-x # 创建并切换(常用)合并分支:
git checkout main git merge feature-x解决冲突: 当合并遇到冲突时:
- 打开冲突文件,查找
<<<<<<<标记 - 手动修改为想要保留的内容
- 删除冲突标记
- 执行
git add和git commit完成合并
- 打开冲突文件,查找
删除分支:
git branch -d feature-x # 合并后删除 git branch -D feature-x # 强制删除未合并分支
4.6 远程仓库协作
添加远程仓库:
git remote add origin https://github.com/user/repo.git推送更改:
git push -u origin main # 首次推送设置上游分支 git push # 之后简化推送拉取更新:
git pull # 相当于git fetch + git merge git fetch # 只获取远程变更不合并查看远程信息:
git remote -v # 查看远程仓库 git branch -r # 查看远程分支 git branch -a # 查看所有分支
5. Git高级技巧与最佳实践
5.1 使用.gitignore文件
在项目根目录创建.gitignore文件,列出不想跟踪的文件模式:
# 忽略所有.log文件 *.log # 忽略node_modules目录 node_modules/ # 但保留重要的.log文件 !important.log常见需要忽略的内容:
- 依赖目录(node_modules, vendor)
- 构建产物(dist, build)
- 编辑器配置文件(.vscode, .idea)
- 系统文件(.DS_Store, thumbs.db)
5.2 储藏临时变更
当需要切换分支但不想提交当前修改时:
git stash # 储藏当前修改 git stash list # 查看储藏列表 git stash apply # 恢复最近储藏 git stash pop # 恢复并删除储藏 git stash drop # 删除储藏5.3 使用标签标记版本
git tag v1.0.0 # 轻量标签 git tag -a v1.0.0 -m "Release version 1.0.0" # 附注标签 git push origin v1.0.0 # 推送标签到远程5.4 交互式变基整理提交历史
git rebase -i HEAD~5 # 修改最近5个提交在交互界面可以:
- 重新排序提交
- 合并多个提交(squash)
- 修改提交信息(reword)
- 拆分提交(edit)
注意:只对尚未推送的提交使用变基,已共享的提交不要变基。
6. Git常用命令速查表
6.1 基础命令速查
| 命令 | 描述 |
|---|---|
git init | 初始化新仓库 |
git clone <url> | 克隆远程仓库 |
git add <file> | 添加文件到暂存区 |
git commit -m "msg" | 提交变更 |
git status | 查看当前状态 |
git log | 查看提交历史 |
6.2 分支与合并
| 命令 | 描述 |
|---|---|
git branch | 列出所有分支 |
git checkout -b <branch> | 创建并切换分支 |
git merge <branch> | 合并指定分支到当前分支 |
git rebase <branch> | 变基当前分支到指定分支 |
6.3 远程协作
| 命令 | 描述 |
|---|---|
git remote add <name> <url> | 添加远程仓库 |
git push -u <remote> <branch> | 推送分支到远程 |
git pull | 拉取远程更新 |
git fetch | 获取远程变更但不合并 |
6.4 撤销与回退
| 命令 | 描述 |
|---|---|
git restore <file> | 撤销工作目录修改 |
git restore --staged <file> | 从暂存区移除文件 |
git commit --amend | 修改最后一次提交 |
git reset --hard <commit> | 回退到指定提交 |
7. 常见问题与解决方案
7.1 提交了错误内容怎么办?
场景:不小心提交了敏感信息或错误文件。
解决方案:
如果是最近一次提交:
git commit --amend # 修改提交 git push -f # 强制推送(仅限个人分支)如果是历史提交:
git rebase -i HEAD~5 # 找到要修改的提交 # 将pick改为edit # 修改文件后 git add . git commit --amend git rebase --continue
警告:强制推送会重写历史,确保没有其他人基于这个分支工作。
7.2 合并冲突如何解决?
场景:git merge或git pull时出现冲突。
解决步骤:
- 运行
git status查看冲突文件 - 打开冲突文件,查找
<<<<<<<标记 - 手动决定保留哪些内容
- 删除冲突标记
- 添加解决后的文件:
git add <file> - 完成合并:
git commit
7.3 如何找回删除的分支或提交?
场景:不小心删除了分支或重置了提交。
解决方案:
- 使用
git reflog查看所有操作历史 - 找到删除前的提交哈希
- 基于该哈希创建新分支:
git branch recovered-branch <hash>
7.4 大文件误提交如何处理?
场景:不小心提交了大文件(如视频、数据集),导致仓库臃肿。
解决方案:
- 使用BFG Repo-Cleaner或
git filter-branch移除历史中的大文件 - 强制推送清理后的仓库
- 在
.gitignore中添加大文件模式 - 团队成员需要重新克隆仓库
提示:考虑使用Git LFS(Large File Storage)管理大文件。
8. Git最佳实践总结
- 提交粒度要小:每次提交只解决一个问题,便于回退和代码审查
- 编写有意义的提交信息:清晰说明为什么修改,而非只是改了啥
- 频繁提交,定期推送:避免本地积压大量未推送提交
- 使用特性分支工作流:每个新功能或修复创建独立分支
- 定期拉取上游变更:减少合并冲突的可能性
- 善用.gitignore:从一开始就忽略不需要版本控制的文件
- 不要重写已共享的历史:避免对已推送的提交使用
rebase -i或reset
刚开始使用Git时可能会觉得复杂,但坚持几周后就会变得自然。我建议每天花10分钟练习Git命令,很快就能熟练掌握。遇到问题时,记住Git几乎总能找回丢失的内容——只要还没执行git gc(垃圾回收)。