Git是开发必备的分布式版本控制工具,核心用于代码版本管理、多人协作开发,日常开发中80%的场景仅需掌握基础+核心命令,本文聚焦高频用法,摒弃冗余理论,全是实操干货,适合日常查阅、复习,也可直接复制命令使用。
一、Git基础必备
核心:掌握「初始化-提交-推送-拉取」基础流程,覆盖单人开发全场景,命令直接复制可用,无需修改核心参数(仅需替换仓库地址、分支名等自定义内容)。
1.1 环境配置(首次使用必做)
配置用户名和邮箱(关联本地提交记录,与GitHub/GitLab账号一致,避免提交记录混乱):
bash
# 配置全局用户名(所有仓库生效)
git config --global user.name "你的用户名"
# 配置全局邮箱(所有仓库生效)
git config --global user.email "你的邮箱"
# 查看配置(验证是否配置成功)
git config --list
注意:若需为单个仓库配置不同用户名/邮箱,删除 --global 参数,在对应仓库目录执行命令即可。
1.2 本地仓库基础操作(单人开发核心)
1. 初始化本地仓库
新建项目后,初始化Git管理(仅首次执行):
bash
# 进入项目目录(cd 命令切换,示例:cd /Users/xxx/project)
cd 你的项目路径
# 初始化Git仓库(生成.git隐藏目录,存储版本信息)
git init
2. 查看文件状态
日常开发中,频繁查看文件是否被修改、是否已暂存:
bash
# 查看详细状态(推荐,清晰显示已修改、未暂存、已暂存文件)
git status
# 简化显示状态(仅显示变更文件)
git status -s
3. 暂存文件
将修改后的文件,提交到暂存区(临时保存,可多次暂存后统一提交):
bash
# 暂存单个文件(替换为你的文件路径/文件名)
git add 文件名.后缀(如:git add index.js)
# 暂存所有修改的文件(常用,避免逐个暂存)
git add .
# 暂存指定目录下的所有文件(如:暂存src目录)
git add src/
4. 提交文件
将暂存区的文件,提交到本地仓库(生成版本记录,必须写提交说明,便于后续回溯):
bash
# 基础提交(-m 后面跟提交说明,简洁明了,如:修改登录功能bug)
git commit -m "提交说明"
# 提交时,自动将已跟踪的修改文件暂存+提交(跳过git add . 步骤,常用)
git commit -am "提交说明"
提交说明规范(便于团队协作和版本回溯):
-
feat:新增功能(如:feat: 新增用户注册功能)
-
fix:修复bug(如:fix: 修复登录失败的bug)
-
docs:修改文档(如:docs: 更新接口文档)
-
style:修改格式(不影响代码逻辑,如:style: 调整代码缩进)
-
refactor:重构代码(不新增功能、不修复bug,如:refactor: 优化登录逻辑)
5. 查看提交记录
回溯版本、查看历史修改记录:
bash
# 查看所有提交记录(按时间倒序,最新提交在最上方)
git log
# 简化显示提交记录(仅显示提交ID、作者、时间、提交说明,常用)
git log --oneline
# 查看指定作者的提交记录(替换为作者名)
git log --author="用户名"
1.3 远程仓库操作(关联远程,推送/拉取代码)
核心:关联GitHub/GitLab/Gitee远程仓库,实现本地代码与远程同步,多人协作的基础。
1. 关联远程仓库
首次关联,替换远程仓库地址为你的仓库地址:
bash
# 关联远程仓库,默认远程仓库名取为origin(行业通用,无需修改)
git remote add origin 远程仓库地址(如:https://github.com/xxx/xxx.git)
# 查看已关联的远程仓库
git remote -v
2. 推送本地代码到远程
首次推送需加 -u 参数,绑定分支,后续可直接 git push:
bash
# 首次推送(将本地main分支推送到远程origin仓库的main分支)
git push -u origin main
# 后续推送(本地main分支有修改后,直接推送)
git push
# 推送指定本地分支到远程指定分支(如:本地dev分支推送到远程dev分支)
git push origin 本地分支名:远程分支名(如:git push origin dev:dev)
3. 从远程拉取代码
同步远程最新代码到本地,避免冲突:
bash
# 拉取远程当前绑定分支的最新代码(常用,如:本地main绑定远程main)
git pull
# 拉取远程指定分支的代码到本地当前分支(如:拉取远程dev分支到本地当前分支)
git pull origin 远程分支名(如:git pull origin dev)
# 拉取远程代码,但不自动合并(避免冲突时强制合并,推荐进阶使用)
git fetch origin 远程分支名
4. 克隆远程仓库
首次获取远程仓库代码,无需初始化本地仓库,直接克隆:
bash
# 克隆远程仓库到本地(会自动生成项目目录,无需cd进入目录)
git clone 远程仓库地址(如:git clone https://github.com/xxx/xxx.git)
# 克隆远程指定分支到本地(如:克隆远程dev分支)
git clone -b 远程分支名 远程仓库地址(如:git clone -b dev https://github.com/xxx/xxx.git)
二、开发高频场景操作(多人协作核心)
日常开发中,多人协作最常用的场景:分支管理、冲突解决、版本回滚,这部分是重点,必须掌握,避免代码冲突、版本混乱。
2.1 分支管理(多人协作必备)
核心原则:主分支(main/master)保持可运行、无bug状态,开发新功能、修复bug均在分支上进行,完成后合并到主分支。
1. 查看分支
bash
# 查看本地所有分支(* 表示当前所在分支)
git branch
# 查看本地+远程所有分支
git branch -a
2. 创建分支
开发新功能用feat/xxx,修复bug用fix/xxx,规范命名:
bash
# 创建本地分支(不切换到新分支)
git branch 分支名(如:git branch feat/login)
# 创建本地分支并立即切换到该分支(常用,一步到位)
git checkout -b 分支名(如:git checkout -b fix/login-bug)
# 简化写法(Git 2.23+ 支持,与上面命令效果一致)
git switch -c 分支名
3. 切换分支
bash
# 切换到已存在的本地分支
git checkout 分支名(如:git checkout main)
# 简化写法(Git 2.23+ 支持)
git switch 分支名
4. 合并分支
将开发完成的分支,合并到目标分支(如:将feat/login合并到main):
bash
# 1. 先切换到目标分支(如:要合并到main,先切换到main)
git checkout main
# 2. 拉取目标分支的最新代码(避免合并时冲突)
git pull
# 3. 合并分支(将feat/login分支合并到当前main分支)
git merge 要合并的分支名(如:git merge feat/login)
5. 删除分支
分支合并完成后,删除无用分支,保持分支整洁:
bash
# 删除本地分支(分支未合并时,需加 -D 强制删除)
git branch -d 分支名(如:git branch -d feat/login)
# 强制删除本地分支(未合并的分支,谨慎使用)
git branch -D 分支名
# 删除远程分支(需推送删除操作到远程)
git push origin --delete 远程分支名(如:git push origin --delete feat/login)
2.2 冲突解决(多人协作必遇,重点掌握)
冲突场景:多人同时修改同一文件的同一行代码,拉取/合并代码时,Git无法自动判断保留哪部分,会提示冲突,需手动解决。
1. 冲突提示
出现 conflict,提示 "Automatic merge failed; fix conflicts and then commit the result."
2. 解决步骤
bash
# 1. 查看冲突文件(Git会标记冲突位置,直接打开文件修改即可)
git status # 会显示 conflict 的文件
- 打开冲突文件,找到冲突标记:
plain
# 冲突标记示例
<<<<<<< HEAD
String name = "张三"; // 本地当前分支的代码
=======
String name = "李四"; // 要合并的分支的代码
>>>>>>> feat/login
- 手动修改冲突:删除冲突标记,保留需要的代码(如:保留"张三",删除"李四"及冲突标记),修改后保存文件。
bash
# 4. 暂存修改后的冲突文件
git add 冲突文件名
# 5. 提交修改(完成冲突解决,无需写复杂说明,简单说明即可)
git commit -m "fix: 解决合并冲突"
# 6. 若之前是拉取代码冲突,提交后可直接推送;若合并分支冲突,合并完成
3. 冲突避免技巧(重点)
-
多人开发时,尽量避免修改同一文件的同一部分;
-
每天开发前,先拉取远程最新代码,同步到本地;
-
开发完成后,及时提交、推送代码,避免长时间不推送导致冲突;
-
分支开发时,定期将主分支的最新代码合并到自己的开发分支,提前解决冲突。
2.3 版本回滚
场景:提交错误代码、误删除文件、合并错误,需回滚到之前的正确版本,分三种常用场景,按需选择。
1. 场景1:代码未暂存(git add 之前),撤销修改
bash
# 撤销单个文件的未暂存修改(替换为文件名)
git checkout -- 文件名.后缀(如:git checkout -- index.js)
# 撤销所有未暂存的修改(谨慎使用,会丢失所有未暂存的修改)
git checkout -- .
2. 场景2:代码已暂存(git add 之后,未commit),撤销暂存
bash
# 撤销单个文件的暂存(替换为文件名)
git reset 文件名.后缀(如:git reset index.js)
# 撤销所有暂存的修改(常用)
git reset
3. 场景3:代码已提交(git commit 之后),回滚到之前的版本
bash
# 1. 查看提交记录,获取要回滚的版本ID(git log --oneline 查看,取前6位即可)
git log --oneline
# 2. 回滚到指定版本(hard 表示彻底回滚,丢弃当前所有修改,谨慎使用)
git reset --hard 版本ID(如:git reset --hard a1b2c3)
# 3. 若已推送至远程,需强制推送回滚后的版本(谨慎使用,会覆盖远程代码)
git push -f origin 分支名(如:git push -f origin main)
注意:强制推送(git push -f)会覆盖远程代码,多人协作时,需提前告知队友,避免影响他人代码。
三、进阶技巧(提升效率,开发必备)
这些技巧能节省日常开发时间,避免重复操作,适合熟练基础操作后使用。
1. 忽略文件(.gitignore)
指定Git不跟踪的文件/目录,避免提交无关文件(如:node_modules、日志文件、IDE配置文件):
plain
# 1. 在项目根目录创建 .gitignore 文件
touch .gitignore
# 2. 编辑 .gitignore,添加需要忽略的内容(常用配置)
node_modules/ # 忽略node_modules目录
dist/ # 忽略打包后的dist目录
.log # 忽略所有.log后缀的文件
.idea/ # 忽略IDEA的配置目录
.vscode/ # 忽略VSCode的配置目录
*.txt # 忽略所有.txt后缀的文件(按需添加)
注意:.gitignore 文件需提交到Git仓库,让所有团队成员共享忽略规则。
2. 查看文件修改内容
未提交前,查看具体修改了哪些内容,避免提交多余代码:
bash
# 查看单个文件的修改内容(替换为文件名)
git diff 文件名.后缀(如:git diff index.js)
# 查看所有修改的内容
git diff
# 查看暂存区与本地仓库的差异(git add 之后,git commit 之前)
git diff --cached
3. 临时存储代码(stash)
临时切换分支,但当前代码未完成,不想提交,可先 stash 存储:
bash
# 存储当前未提交的修改(包括暂存和未暂存)
git stash
# 查看所有stash存储的记录
git stash list
# 恢复最近一次stash的修改(恢复后,stash记录不删除)
git stash apply
# 恢复最近一次stash的修改,并删除该stash记录(常用)
git stash pop
# 删除指定的stash记录(替换为stash@{}中的序号,如:stash@{0})
git stash drop stash@{0}
# 删除所有stash记录
git stash clear
4. 修改最近一次提交说明
提交后发现说明写错,无需回滚,直接修改:
bash
git commit --amend -m "修改后的提交说明"
四、常见问题与避坑指南(新手必看)
问题1:git push 提示 "fatal: Could not read from remote repository"
解决:远程仓库地址错误,或未配置SSH密钥(GitHub/GitLab需配置),重新关联远程仓库(git remote add origin 正确地址),或配置SSH密钥。
问题2:拉取代码时,提示 "Your local changes would be overwritten by merge"
解决:本地有未提交的修改,拉取远程代码会覆盖,两种方案:① 先提交本地修改(git commit -am "说明"),再拉取;② 临时存储本地修改(git stash),拉取后恢复(git stash pop)。
问题3:误删本地文件,如何恢复?
解决:若文件已被Git跟踪(之前提交过),执行 git checkout -- 文件名 即可恢复;若未被跟踪(未git add),无法通过Git恢复,需借助文件恢复工具。
问题4:分支合并后,出现多余的提交记录
解决:合并分支时,尽量使用 git merge --no-ff (保留分支合并记录,清晰可追溯),避免快速合并导致记录混乱。
避坑重点
-
不要直接在主分支(main/master)开发,所有开发工作在分支上进行;
-
提交说明尽量规范,便于后续版本回溯和团队协作;
-
强制推送(git push -f)谨慎使用,仅在自己的分支或无人协作的分支使用;
-
定期备份代码,避免本地仓库损坏导致代码丢失(远程仓库本身就是备份)。
五、总结
开发日常使用Git,核心掌握「基础操作+分支管理+冲突解决+版本回滚」,80%的场景都能覆盖。本文所有命令均为实操高频款,可直接复制使用,无需记忆复杂参数,重点是理解场景、规范操作,避免版本混乱和代码丢失。