一、Git 核心本质与基础认知
你想深入了解 Git 的本质和高频指令,首先我们需要明确:Git 是一款分布式版本控制系统(Distributed Version Control System,DVCS),由林纳斯・托瓦兹(Linus Torvalds)在 2005 年为管理 Linux 内核开发而创建。与集中式版本控制系统(如 SVN)不同,Git 的核心优势在于分布式架构 —— 每个开发者本地都拥有完整的代码仓库副本,包含所有历史版本记录,无需依赖中央服务器即可完成大部分版本管理操作,这使得离线开发、本地版本回溯、分支高效协作成为可能。
1.1 Git 的核心价值
- 版本追溯与回溯:精准记录代码每一次修改的作者、时间、内容,可随时回滚到任意历史版本,规避误操作导致的代码丢失
- 分布式协作:多人并行开发无需争抢中央服务器权限,本地仓库可独立运作,仅在需要同步时进行远程交互
- 分支高效管理:创建、切换、合并分支的成本极低,支持功能开发、bug 修复、版本发布等多场景并行推进
- 数据安全性:采用 SHA-1 哈希算法对所有数据进行校验,确保代码历史不可篡改,本地副本可作为远程仓库的备份
- 跨平台兼容:支持 Windows、macOS、Linux 等主流操作系统,适配各类开发环境
1.2 Git 的核心工作区域
要理解 Git 指令,首先需明确其四个核心工作区域,所有操作本质都是在区域间传递数据:
- 工作区(Working Directory):本地可见的项目文件夹,存放当前正在编辑的代码文件,是开发者直接操作的区域
- 暂存区(Staging Area/Index):临时存放待提交的修改记录(相当于 “提交缓冲区”),可通过指令筛选需要提交的文件,避免一次性提交所有修改
- 本地仓库(Local Repository):隐藏目录
.git(位于工作区根目录),存储所有版本历史、分支、标签等核心数据,是 Git 的核心存储区域 - 远程仓库(Remote Repository):托管在网络服务器上的仓库(如 GitHub、GitLab、Gitee),用于多人协作时同步代码,实现版本共享
1.3 Git 的数据存储模型
Git 不以 “文件变更” 为核心,而是以 “快照(Snapshot)” 为基础存储数据。每次提交(commit)时,Git 会对当前暂存区的所有文件生成一份完整快照,并记录快照的引用信息(哈希值),而非仅存储文件的修改差异。这种模型使得版本回溯和分支切换速度极快,同时保证了数据的完整性。
二、Git 常用指令(按使用频率从高到低排序)
以下指令按照日常开发中的使用频次优先级排序,涵盖从仓库初始化、代码提交、分支管理到远程协作的全流程,每个指令均包含功能解析、使用格式、示例及注意事项。
2.1 基础操作指令(高频核心)
2.1.1 git status - 查看工作区与暂存区状态
功能解析:这是使用频率最高的 Git 指令,用于实时查看当前工作区的文件状态,包括:未跟踪文件(新增文件,未被 Git 管理)、已修改但未暂存文件、已暂存待提交文件、当前所在分支、是否与远程分支同步等信息,是开发过程中排查文件状态的核心指令。
使用格式:
bash
git status # 完整输出详细状态
git status -s # 简洁输出状态(推荐日常使用,节省终端空间)
git status --porcelain # 机器可读格式输出,适用于脚本编写
示例解析:
bash
# 简洁输出示例
$ git status -s
M README.md # 已修改,未暂存(前面有空格)
A src/utils.js # 已暂存,待提交(前面是A)
?? test/ demo.js # 未跟踪文件(前面是??)
D config.json # 已删除,未暂存(前面是D)
注意事项:
- 该指令仅查看状态,不修改任何数据,可放心频繁使用
- 若工作区无修改,会提示 “nothing to commit, working tree clean”
2.1.2 git add - 将修改添加到暂存区
功能解析:Git 的核心提交前置指令,用于将工作区中已修改、新增的文件(或删除操作)添加到暂存区,为后续的提交(commit)做准备。暂存区相当于 “待提交清单”,可灵活筛选需要纳入版本管理的文件。
使用格式:
bash
git add <文件名> # 添加单个文件到暂存区
git add <目录名> # 添加整个目录(包含子目录)的所有修改到暂存区
git add . # 添加当前目录下所有未暂存的修改(新增、修改、删除)
git add -u # 仅添加已跟踪文件的修改和删除,不包含新增的未跟踪文件
git add -A # 等同于git add . + git add -u,添加所有修改(推荐)
git add -p # 交互式添加,逐段选择文件的修改内容进行暂存(适用于部分提交)
示例解析:
bash
# 单个文件添加
git add README.md
# 所有修改添加
git add -A
# 交互式添加(可选择某段代码是否暂存)
git add -p src/index.js
注意事项:
- 新增的未跟踪文件必须通过
git add才能被 Git 管理,仅修改已跟踪文件时也需通过该指令暂存 - 若添加后发现错误,可使用
git reset HEAD <文件名>撤销暂存 - 避免盲目使用
git add .,防止将临时文件(如 node_modules、日志文件)添加到暂存区(可通过.gitignore 文件排除)
2.1.3 git commit - 将暂存区修改提交到本地仓库
功能解析:Git 版本管理的核心指令,用于将暂存区中的所有修改打包为一个 “版本快照”,提交到本地仓库,生成唯一的哈希值(SHA-1)作为版本标识,同时记录提交作者、时间和提交说明。每次 commit 都是一次完整的版本记录,可通过该哈希值追溯历史。
使用格式:
bash
运行
git commit -m "提交说明" # 直接添加提交信息,快速提交(推荐日常使用)
git commit # 打开默认编辑器(如vim),手动输入提交说明(多行)
git commit -am "提交说明" # 跳过暂存区,直接将已跟踪文件的修改提交(等同于git add -u + git commit -m)
git commit --amend # 修正最后一次提交(修改提交说明或补充暂存文件,不新增版本)
git commit --no-verify # 跳过提交钩子(如ESLint校验),强制提交(谨慎使用)
示例解析:
bash
# 快速提交,附带清晰的提交说明(推荐格式:类型(模块): 描述,如feat(login): 新增验证码登录功能)
git commit -m "fix(home): 修复轮播图切换卡顿问题"
# 修正最后一次提交的说明
git commit --amend -m "fix(home): 修复轮播图切换卡顿及图片错位问题"
# 跳过暂存区直接提交已跟踪文件的修改
git commit -am "docs: 更新接口文档说明"
注意事项:
- 提交说明必须清晰规范,便于后续追溯和团队协作(推荐遵循 Conventional Commits 规范)
- 每次 commit 应聚焦一个独立功能或 bug 修复,避免一次性提交大量无关修改
- 提交后仅更新本地仓库,不会同步到远程仓库,需通过
git push完成远程同步 git commit --amend会修改历史提交记录,若该提交已推送到远程仓库,需谨慎使用(可能导致冲突)
2.1.4 git pull - 拉取远程仓库最新代码并合并到本地
功能解析:多人协作中高频使用的指令,用于从远程仓库拉取指定分支的最新代码,并自动合并到本地当前分支,等同于git fetch + git merge(默认)或git fetch + git rebase(配置后)。确保本地代码与远程仓库保持同步,避免后续推送时出现冲突。
使用格式:
bash
git pull # 拉取当前分支对应的远程分支最新代码,并自动合并
git pull <远程仓库名> <远程分支名> # 拉取指定远程仓库的指定分支代码
git pull --rebase # 拉取远程代码后,使用变基(rebase)代替合并(merge),保持提交历史整洁
git pull origin main --allow-unrelated-histories # 允许合并无关联历史的分支(适用于初次关联远程仓库)
示例解析:
bash
# 拉取当前分支远程最新代码(默认远程仓库为origin)
git pull
# 拉取origin仓库的main分支代码,并使用变基合并
git pull --rebase origin main
注意事项:
- 拉取前建议先通过
git status确保本地工作区干净(无未提交的修改),否则可能出现合并冲突 - 若出现合并冲突,需先手动解决冲突(冲突文件会标记 <<<<<<<、=======、>>>>>>>),然后通过
git add <冲突文件>和git commit完成合并 - 长期开发的分支推荐使用
git pull --rebase,避免生成大量无用的合并提交记录,保持历史提交线性 - 若本地修改与远程修改冲突严重,可通过
git stash暂存本地修改,拉取完成后再恢复暂存内容
2.1.5 git push - 将本地仓库修改推送到远程仓库
功能解析:多人协作的核心同步指令,用于将本地仓库中已提交的版本记录推送到指定远程仓库的对应分支,使远程仓库与本地仓库保持同步,让其他协作成员能够获取到自己的修改。
使用格式:
bash
git push # 推送当前分支到对应的远程分支(需已关联远程分支)
git push <远程仓库名> <本地分支名>:<远程分支名> # 推送本地指定分支到远程指定分支
git push -u <远程仓库名> <本地分支名> # 推送并关联本地分支与远程分支(首次推送分支时使用)
git push --force # 强制推送,覆盖远程分支历史(谨慎使用,可能导致他人代码丢失)
git push --force-with-lease # 安全强制推送,仅在远程分支无他人新增提交时覆盖(比--force安全)
git push origin --delete <远程分支名> # 删除远程仓库的指定分支
示例解析:
# 首次推送本地dev分支到远程origin仓库的dev分支,并建立关联
git push -u origin dev
# 后续推送(已关联分支)
git push
# 推送本地test分支到远程的test-beta分支
git push origin test:test-beta
# 删除远程的废弃分支feature/old-function
git push origin --delete feature/old-function
注意事项:
- 推送前必须先通过
git pull同步远程最新代码,否则可能因版本冲突被拒绝推送 - 禁止在公共分支(如 main、master、develop)使用
git push --force,避免覆盖他人提交 - 若推送失败,提示 “non-fast-forward”,说明远程分支有新增提交,需先拉取并解决冲突后再推送
- 私有分支或个人开发分支,在确认无他人协作时,可谨慎使用
--force-with-lease修正提交历史
2.2 分支管理指令(高频核心)
分支是 Git 的灵魂特性,以下指令是日常分支操作的高频选择。
2.2.1 git checkout - 切换分支或恢复文件
功能解析:多功能指令,核心用途有二:一是切换到已存在的本地分支或远程分支;二是恢复工作区中指定文件的修改(覆盖当前未暂存的修改)。在 Git 2.23 版本后,新增git switch指令专门用于切换分支,git restore用于恢复文件,但git checkout仍被广泛使用。
使用格式:
bash
# 切换分支相关
git checkout <分支名> # 切换到本地已存在的分支
git checkout -b <新分支名> # 创建并切换到新分支(等同于git branch <新分支名> + git checkout <新分支名>)
git checkout -b <本地分支名> <远程仓库名>/<远程分支名> # 基于远程分支创建并切换到本地分支
git checkout --track <远程仓库名>/<远程分支名> # 跟踪远程分支,创建并切换到本地同名分支
# 恢复文件相关
git checkout -- <文件名> # 用暂存区的文件覆盖工作区的对应文件,撤销工作区未暂存的修改
git checkout <commit哈希值> -- <文件名> # 用指定历史版本的文件覆盖当前工作区和暂存区的文件
示例解析:
bash
# 切换到main分支
git checkout main
# 创建并切换到feature/user-center分支
git checkout -b feature/user-center
# 基于远程origin/develop分支创建本地develop分支并切换
git checkout -b develop origin/develop
# 撤销工作区中README.md的未暂存修改
git checkout -- README.md
# 恢复历史版本(哈希值前6位即可)的config.json文件
git checkout a1b2c3 -- config.json
注意事项:
- 切换分支前,需确保当前工作区和暂存区无未提交的修改(或通过
git stash暂存),否则切换会失败(避免修改丢失) git checkout -- <文件名>会彻底覆盖工作区的修改,且无法恢复,使用前需确认无需保留当前修改- 避免在切换分支时使用简写,防止与恢复文件操作混淆,推荐对分支切换使用
git switch(新版 Git)
2.2.2 git branch - 分支创建、查看与删除
功能解析:专门用于分支管理的指令,可查看所有本地 / 远程分支、创建新分支、删除无用分支,是分支操作的基础指令。
使用格式:
bash
git branch # 查看本地所有分支(当前分支前有*标记)
git branch -r # 查看所有远程分支
git branch -a # 查看本地和远程所有分支
git branch <新分支名> # 创建新分支(仅创建,不切换)
git branch -d <分支名> # 删除本地已合并的分支(安全删除,未合并会提示失败)
git branch -D <分支名> # 强制删除本地分支(无论是否合并,谨慎使用)
git branch -m <旧分支名> <新分支名> # 重命名本地分支
git branch --merged # 查看已合并到当前分支的所有分支(可安全删除)
git branch --no-merged # 查看未合并到当前分支的所有分支(删除前需确认)
示例解析:
bash
# 查看所有分支
git branch -a
# 创建feature/payment分支(不切换)
git branch feature/payment
# 删除已合并的feature/old分支
git branch -d feature/old
# 强制删除未合并的test分支
git branch -D test
# 将分支feat/login重命名为feature/login
git branch -m feat/login feature/login
注意事项:
- 创建分支时,新分支会继承当前分支的最新提交记录
- 远程分支的删除需使用
git push origin --delete <远程分支名>,git branch -d仅能删除本地分支 - 定期使用
git branch --merged清理无用分支,保持仓库整洁
2.2.3 git merge - 合并分支
功能解析:用于将一个分支的所有提交记录合并到当前分支,是分支协作的核心指令(如将功能分支合并到开发分支、开发分支合并到主分支)。Git 默认采用 “三方合并” 策略,会生成一个新的合并提交记录。
使用格式:
bash
git merge <待合并分支名> # 将指定分支合并到当前分支
git merge --no-ff <待合并分支名> # 禁用快进合并(Fast-Forward),强制生成合并提交记录(便于追溯分支历史)
git merge --abort # 合并过程中出现冲突,放弃合并,恢复到合并前的状态
git merge --continue # 解决冲突后,继续完成合并流程
git merge <commit哈希值> # 将指定提交记录合并到当前分支(适用于单个提交的合并)
示例解析:
bash
# 切换到main分支,合并develop分支的修改
git checkout main
git merge develop
# 合并feature/user-center分支,禁用快进合并,保留分支历史
git merge --no-ff feature/user-center
# 合并过程中出现冲突,解决后继续合并
git merge --continue
# 放弃当前合并操作
git merge --abort
注意事项:
- 合并前需确保当前分支和待合并分支均已同步远程最新代码(
git pull) - 合并冲突是正常现象,冲突文件会标记冲突区域,需手动修改后通过
git add <冲突文件>标记为已解决 - 公共分支(如 main、develop)推荐使用
--no-ff合并,保留分支结构,便于后续追溯;个人分支可使用快进合并,简化历史 - 避免在有未提交修改的分支上进行合并操作,防止冲突处理复杂
2.2.4 git stash - 暂存工作区未提交修改
功能解析:在需要切换分支或拉取代码,但当前工作区有未提交的修改(且暂时不想提交)时,git stash可将这些修改暂存到 “储藏区”,使工作区恢复到干净状态,后续可随时恢复暂存的修改,是临时保存修改的核心指令。
使用格式:
bash
git stash # 将当前工作区和暂存区的未提交修改暂存(默认生成默认说明)
git stash save "暂存说明" # 暂存并添加自定义说明(便于区分多个储藏)
git stash list # 查看所有暂存记录(按时间倒序排列,格式:stash@{0}: 说明)
git stash apply # 恢复最新的暂存记录(stash@{0}),但暂存记录仍保留在储藏区
git stash apply stash@{n} # 恢复指定编号的暂存记录(n为编号,从0开始)
git stash pop # 恢复最新的暂存记录,并删除该暂存记录(推荐,避免冗余)
git stash drop stash@{n} # 删除指定编号的暂存记录
git stash clear # 删除所有暂存记录(谨慎使用)
git stash show # 查看最新暂存记录的修改概要
git stash show -p # 查看最新暂存记录的详细修改内容
示例解析:
bash
# 暂存当前修改,添加自定义说明
git stash save "未完成的用户中心表单开发"
# 查看所有暂存记录
git stash list
# 恢复最新暂存记录,并删除该记录
git stash pop
# 恢复编号为1的暂存记录(保留暂存记录)
git stash apply stash@{1}
# 删除编号为0的暂存记录
git stash drop stash@{0}
# 查看最新暂存记录的详细修改
git stash show -p
注意事项:
git stash仅暂存已跟踪文件的修改和暂存区的修改,未跟踪的新增文件不会被暂存(可通过git stash -u包含未跟踪文件,git stash -a包含忽略文件)- 暂存记录存储在本地,不会推送到远程仓库,切换电脑后无法获取
- 定期清理无用的暂存记录,避免储藏区冗余
2.3 历史查询与回溯指令(中高频)
2.3.1 git log - 查看提交历史记录
功能解析:用于查看本地仓库的所有提交历史,可展示每个提交的哈希值、作者、时间、提交说明等信息,是追溯版本历史、排查问题的核心指令。
使用格式:
bash
git log # 查看完整提交历史(按时间倒序,最新提交在前)
git log --oneline # 简洁输出,每个提交仅显示哈希值前7位和提交说明(推荐日常使用)
git log --graph # 以图形化方式展示提交历史和分支合并情况(直观查看分支结构)
git log --pretty=format:"%h - %an, %ar : %s" # 自定义输出格式(哈希、作者、相对时间、提交说明)
git log -n <数字> # 查看最近n条提交记录
git log --author="<作者名/邮箱>" # 查看指定作者的提交记录
git log --since="<时间>" # 查看指定时间之后的提交记录(如"2025-12-01"、"1 week ago")
git log --until="<时间>" # 查看指定时间之前的提交记录
git log <文件名> # 查看指定文件的提交历史
git log <分支名1>..<分支名2> # 查看分支2有但分支1没有的提交记录(用于对比分支差异)
示例解析:
bash
# 简洁查看最近5条提交记录
git log --oneline -5
# 图形化查看所有分支的提交历史
git log --graph --oneline --all
# 查看作者"张三"的提交记录
git log --author="张三"
# 查看最近1个月内README.md的修改历史
git log --since="1 month ago" README.md
# 查看develop分支有但main分支没有的提交
git log main..develop
注意事项:
- 该指令仅查看本地仓库的提交历史,未拉取的远程提交无法显示
- 若提交历史过长,可通过
q键退出日志查看界面 - 图形化日志(
--graph)在排查分支合并历史时非常实用,推荐结合--oneline使用
2.3.2 git reset - 回溯版本或撤销暂存
功能解析:用于修改本地仓库的提交历史,可实现版本回溯、撤销暂存区修改等功能,根据参数不同,影响范围分为工作区、暂存区、本地仓库,使用时需谨慎(避免丢失修改)。
使用格式:
bash
# 仅撤销暂存区修改,不影响工作区(等同于git reset HEAD <文件名>)
git reset <文件名>
git reset HEAD <文件名>
# 软重置:仅移动HEAD指针,保留暂存区和工作区的修改(可重新提交)
git reset --soft <commit哈希值/分支名/HEAD~n>
# 混合重置(默认):移动HEAD指针,撤销暂存区修改,保留工作区修改
git reset --mixed <commit哈希值/分支名/HEAD~n>
# 硬重置:移动HEAD指针,彻底撤销暂存区和工作区的所有修改,恢复到指定版本(谨慎使用)
git reset --hard <commit哈希值/分支名/HEAD~n>
# 撤销最后n次提交(HEAD~n表示倒数第n个提交)
git reset --hard HEAD~2 # 撤销最后2次提交
示例解析:
bash
# 撤销暂存区中README.md的修改(保留工作区修改)
git reset README.md
# 软重置到倒数第1个提交(撤销最后一次提交,保留暂存区和工作区修改)
git reset --soft HEAD~1
# 混合重置到指定版本(哈希值前6位),保留工作区修改
git reset --mixed a1b2c3
# 硬重置到main分支的最新版本,彻底丢弃本地所有未提交修改
git reset --hard origin/main
注意事项:
git reset --hard会彻底删除指定版本之后的所有修改和提交记录,且无法恢复,使用前需确认无需保留这些内容- 若重置的提交记录已推送到远程仓库,禁止使用
git reset(会导致远程与本地历史不一致,需使用git push --force,风险极高) - 仅在本地开发分支(无他人协作)中使用重置操作,公共分支严禁使用
2.3.3 git revert - 反向提交(安全回溯版本)
功能解析:与git reset不同,git revert通过创建一个新的 “反向提交” 来撤销指定提交的修改,不会修改原有提交历史,是安全的版本回溯方式,适用于公共分支(如 main 分支)的版本回滚。
使用格式:
bash
git revert <commit哈希值> # 撤销指定提交的修改,创建新的提交
git revert -n <commit哈希值> # 撤销指定提交,但不自动创建提交(可批量撤销后统一提交)
git revert --abort # 撤销正在进行的revert操作,恢复到操作前状态
git revert HEAD~n # 撤销倒数第n次提交的修改
示例解析:
bash
# 撤销最近一次提交(创建新的反向提交)
git revert HEAD
# 撤销指定提交(哈希值前6位),不自动提交
git revert -n a1b2c3
# 手动修改后提交
git commit -m "revert: 撤销a1b2c3提交的xxx功能"
注意事项:
git revert仅撤销指定提交的修改,不会影响其他提交记录,安全性高,适合公共分支- 若撤销的提交涉及文件冲突,需手动解决冲突后再完成提交
- 对于合并提交,
git revert需要额外指定-m参数(选择保留哪个父分支的修改),操作相对复杂
2.4 远程仓库交互指令(中高频)
2.4.1 git remote - 管理远程仓库关联
功能解析:用于查看、添加、修改、删除本地仓库与远程仓库的关联,是远程协作的基础指令,默认远程仓库名称为origin。
使用格式:
bash
git remote # 查看已关联的远程仓库名称列表
git remote -v # 查看远程仓库名称及对应的URL(fetch:拉取地址,push:推送地址)
git remote add <远程仓库名> <远程仓库URL> # 添加远程仓库关联
git remote rename <旧远程仓库名> <新远程仓库名> # 重命名远程仓库
git remote remove <远程仓库名> # 删除指定远程仓库关联
git remote set-url <远程仓库名> <新URL> # 修改远程仓库的URL(如从HTTPS改为SSH)
示例解析:
bash
# 查看远程仓库详情
git remote -v
# 添加名为gitee的远程仓库(Gitee地址)
git remote add gitee https://gitee.com/xxx/xxx.git
# 将origin远程仓库的URL改为SSH地址
git remote set-url origin git@github.com:xxx/xxx.git
# 删除名为old_origin的远程仓库关联
git remote remove old_origin
注意事项:
- 远程仓库 URL 分为 HTTPS 和 SSH 两种,HTTPS 每次推送需输入账号密码(可配置缓存),SSH 需提前配置密钥,无需重复验证
- 一个本地仓库可关联多个远程仓库(如同时关联 GitHub 和 Gitee),便于代码同步
2.4.2 git fetch - 拉取远程仓库最新数据(不合并)
功能解析:用于从远程仓库拉取最新的分支、提交记录等数据到本地,但不会自动合并到当前分支,仅更新本地的远程跟踪分支(如origin/main),便于手动查看远程修改后再决定如何合并。
使用格式:
bash
git fetch # 拉取所有远程仓库的最新数据
git fetch <远程仓库名> # 拉取指定远程仓库的最新数据
git fetch <远程仓库名> <远程分支名> # 拉取指定远程仓库的指定分支数据
git fetch --prune # 拉取远程数据的同时,删除本地已不存在的远程分支(清理无效跟踪分支)
示例解析:
bash
# 拉取origin远程仓库的所有最新数据
git fetch origin
# 拉取origin仓库的develop分支数据
git fetch origin develop
# 拉取远程数据并清理无效跟踪分支
git fetch --prune
注意事项:
git fetch仅拉取数据,不修改本地工作分支,安全性高,可放心使用- 拉取后可通过
git log origin/main..main查看本地分支与远程分支的差异 git pull本质上是git fetch+git merge,若需要先审查远程修改,建议先使用git fetch
2.5 其他实用指令(中低频,但不可或缺)
2.5.1 git clone - 克隆远程仓库到本地
功能解析:用于从远程仓库复制完整的仓库副本到本地,包括所有历史提交记录、分支、标签等数据,是获取远程项目的初始指令。
使用格式:
bash
git clone <远程仓库URL> # 克隆远程仓库到本地,创建与仓库同名的文件夹
git clone <远程仓库URL> <本地文件夹名> # 克隆远程仓库到指定名称的本地文件夹
git clone --branch <分支名> <远程仓库URL> # 克隆远程仓库的指定分支
git clone --depth <数字> <远程仓库URL> # 浅克隆,仅拉取最近n条提交记录(加快克隆速度,适用于大型仓库)
示例解析:
bash
# 克隆GitHub上的仓库到本地
git clone https://github.com/xxx/xxx.git
# 克隆指定分支develop到本地文件夹my-project
git clone --branch develop https://github.com/xxx/xxx.git my-project
# 浅克隆,仅拉取最近10条提交记录
git clone --depth 10 git@github.com:xxx/xxx.git
注意事项:
- 克隆完成后,本地会自动关联远程仓库(默认名称为 origin)
- 浅克隆(
--depth)无法获取完整历史记录,若后续需要完整历史,可通过git fetch --unshallow补充 - 克隆私有仓库时,需提前配置好身份验证(HTTPS 输入账号密码,SSH 配置密钥)
2.5.2 git diff - 查看文件修改差异
功能解析:用于查看不同区域(工作区与暂存区、暂存区与本地仓库、不同分支、不同历史版本)之间的文件修改差异,是排查代码修改内容的核心指令。
使用格式:
bash
git diff # 查看工作区与暂存区之间的文件差异(未暂存的修改)
git diff --staged # 查看暂存区与本地仓库最新提交之间的文件差异(已暂存未提交的修改)
git diff <分支名1> <分支名2> # 查看两个分支之间的所有文件差异
git diff <commit哈希值1> <commit哈希值2> # 查看两个历史版本之间的差异
git diff <文件名> # 查看指定文件在工作区与暂存区的差异
git diff --stat # 仅显示修改文件的统计信息(新增/删除行数),不显示具体差异内容
示例解析:
bash
运行
# 查看工作区未暂存的修改差异
git diff
# 查看暂存区已添加但未提交的修改差异
git diff --staged
# 查看main分支与develop分支的差异
git diff main develop
# 查看指定文件的历史版本差异
git diff a1b2c3 d4e5f6 README.md
# 查看修改文件的统计信息
git diff --stat
注意事项:
- 差异对比界面中,
-表示删除的内容,+表示新增的内容 - 可通过
q键退出差异查看界面 - 对比分支差异时,若文件过多,可结合
grep筛选指定文件,如git diff main develop | grep README.md
2.5.3 git tag - 标签管理(版本发布标记)
功能解析:用于为指定提交记录创建标签(通常用于版本发布,如 v1.0.0、v2.1.1),标签是不可移动的标记,用于永久标记重要的版本节点,便于后续追溯和回滚。
使用格式:
bash
运行
git tag # 查看所有本地标签
git tag <标签名> # 为最新提交创建轻量标签(仅包含标签名称,无附加信息)
git tag -a <标签名> -m "标签说明" # 为最新提交创建附注标签(包含作者、时间、说明,推荐)
git tag -a <标签名> <commit哈希值> -m "标签说明" # 为指定历史提交创建附注标签
git push <远程仓库名> <标签名> # 推送单个标签到远程仓库
git push <远程仓库名> --tags # 推送所有本地标签到远程仓库
git tag -d <标签名> # 删除本地标签
git push <远程仓库名> --delete <标签名> # 删除远程标签
git checkout <标签名> # 切换到指定标签对应的版本(处于分离HEAD状态,不建议在此状态修改代码)
示例解析:
bash
运行
# 创建附注标签v1.0.0,标记正式版本发布
git tag -a v1.0.0 -m "正式版本v1.0.0,支持用户登录和数据查询功能"
# 为指定提交创建标签
git tag -a v0.9.0 a1b2c3 -m "测试版本v0.9.0"
# 推送所有标签到远程仓库
git push origin --tags
# 删除本地标签v0.8.0
git tag -d v0.8.0
# 删除远程标签v0.8.0
git push origin --delete v0.8.0
注意事项:
- 标签与分支不同,标签是静态标记,分支是动态更新的,标签通常用于版本发布,不用于开发
- 切换到标签后处于 “分离 HEAD 状态”,若在此状态修改代码并提交,新提交不会关联到任何分支,需创建新分支保留修改
- 推送标签时,需单独执行推送指令(
git push不会自动推送标签)
三、Git 指令使用场景总结与最佳实践
3.1 日常开发流程指令组合
- 初始化 / 克隆项目:
git clone <远程URL> - 创建功能分支:
git checkout -b feature/xxx - 开发过程中:
- 查看状态:
git status -s - 添加修改到暂存区:
git add -A - 提交到本地仓库:
git commit -m "feat(xxx): 描述"
- 查看状态:
- 同步远程代码:
git pull --rebase origin develop - 推送本地分支:
git push -u origin feature/xxx - 功能完成后合并:
- 切换到开发分支:
git checkout develop - 合并功能分支:
git merge --no-ff feature/xxx - 推送合并结果:
git push origin develop
- 切换到开发分支:
- 清理无用分支:
git branch -d feature/xxx
3.2 常见问题解决方案指令
- 误修改文件,想撤销工作区修改:
git checkout -- <文件名> - 误添加文件到暂存区,想撤销暂存:
git reset <文件名> - 误提交,想撤销最后一次提交(保留修改):
git reset --soft HEAD~1 - 需要切换分支,但有未提交修改:
git stash→ 切换分支 → 恢复修改:git stash pop - 合并冲突,解决后继续合并:修改冲突文件 →
git add <冲突文件>→git merge --continue - 远程仓库 URL 变更,修改本地关联:
git remote set-url origin <新URL>
3.3 最佳实践原则
- 提交规范:遵循 Conventional Commits 规范,提交说明清晰明确,便于追溯和自动化版本管理
- 分支规范:采用 Git Flow 或 GitHub Flow 分支模型,区分主分支(main)、开发分支(develop)、功能分支(feature)、修复分支(hotfix)
- 避免盲目操作:不随意使用
git push --force、git reset --hard、git branch -D等危险指令 - 忽略无用文件:通过
.gitignore文件排除临时文件、依赖目录、日志文件等,不纳入版本管理 - 定期同步远程:频繁拉取远程代码,减少合并冲突的概率
- 保留完整历史:公共分支使用
git revert回溯版本,不修改原有提交历史;个人分支可合理使用git rebase整理提交记录
四、总结
Git 作为分布式版本控制系统的标杆,其核心价值在于高效的版本追溯、灵活的分支管理和便捷的多人协作。本文按使用频率排序详细解析了 Git 的核心指令,从基础的git status、git add、git commit,到分支管理的git checkout、git branch、git merge,再到远程协作的git pull、git push、git remote,以及历史回溯的git log、git reset、git revert,覆盖了日常开发的全流程需求。
掌握 Git 指令不仅需要理解单个指令的功能,更需要掌握指令组合和最佳实践,遵循规范的操作流程,才能充分发挥 Git 的优势,提高开发效率,避免因误操作导致的代码丢失或协作冲突。对于开发者而言,Git 已成为必备工具,熟练运用这些高频指令,是提升专业能力的重要基础。

8069

被折叠的 条评论
为什么被折叠?



