开发常用Git核心知识

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 的文件
  1. 打开冲突文件,找到冲突标记:
plain 复制代码
# 冲突标记示例
<<<<<<< HEAD
String name = "张三"; // 本地当前分支的代码
=======
String name = "李四"; // 要合并的分支的代码
>>>>>>> feat/login
  1. 手动修改冲突:删除冲突标记,保留需要的代码(如:保留"张三",删除"李四"及冲突标记),修改后保存文件。
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 &#34;说明&#34;),再拉取;② 临时存储本地修改(git stash),拉取后恢复(git stash pop)。

问题3:误删本地文件,如何恢复?

解决:若文件已被Git跟踪(之前提交过),执行 git checkout -- 文件名 即可恢复;若未被跟踪(未git add),无法通过Git恢复,需借助文件恢复工具。

问题4:分支合并后,出现多余的提交记录

解决:合并分支时,尽量使用 git merge --no-ff (保留分支合并记录,清晰可追溯),避免快速合并导致记录混乱。

避坑重点

  • 不要直接在主分支(main/master)开发,所有开发工作在分支上进行;

  • 提交说明尽量规范,便于后续版本回溯和团队协作;

  • 强制推送(git push -f)谨慎使用,仅在自己的分支或无人协作的分支使用;

  • 定期备份代码,避免本地仓库损坏导致代码丢失(远程仓库本身就是备份)。

五、总结

开发日常使用Git,核心掌握「基础操作+分支管理+冲突解决+版本回滚」,80%的场景都能覆盖。本文所有命令均为实操高频款,可直接复制使用,无需记忆复杂参数,重点是理解场景、规范操作,避免版本混乱和代码丢失。

相关推荐
MageGojo1 小时前
怎么用 Node.js 接入内容审核 API:从调通到评论风控的完整做法
后端
星栈1 小时前
Rust 泛型注入:一个 Service 协调四个 DDD 聚合的实战复盘
后端·架构
Lyyaoo.1 小时前
Git常用命令及应用
git
木雷坞1 小时前
vLLM 服务上 K8s 前,我先把 GPU、探针和镜像过了一遍
后端
用户298698530141 小时前
用 Java 操作 Word 文档?试试添加内容控件
java·后端
golang学习记1 小时前
Go 里什么时候可以“panic”?
后端
jakeswang2 小时前
【AI面经】大模型半夜发短信骂客户?Agent 工具调用失控,你如何设计防护机制?
java·后端