一、常见命令

1.初始化(只在第一次做)

git init
(切换到目录>右键Git Bash Here>用liunx命令到对应目录下>初始化)
效果: 会在当前目录 生成.get目录(隐藏的)

1.1Git 设置签名(本地库初始化后执行)

签名的作用
  • 作用:区分不同开发人员的身份。
  • 形式: 用户名:tom Email 地址:goodMorning@atguigu.com
  • 重要辨析: 这里的签名 与登录远程库(GitHub / GitLab / Gitee 等代码托管中心)的账号、密码没有任何关系。 签名仅用于标识“是谁提交了这次代码”。
签名级别与配置命令
1. 项目级别 / 仓库级别(不带 --global
  • 作用范围:仅在当前本地仓库内有效。
  • 命令
git config user.name tom_pro git config user.email goodMorning_pro@taku.com
  • 信息保存位置
./.git/config
2. 系统用户级别(带 --global
  • 作用范围:对当前操作系统用户下的所有仓库生效。
  • 命令
git config --global user.name tom_glb git config --global user.email goodMorning_glb@taku.com
  • 信息保存位置
~/.gitconfig # Windows 示例:C:/Users/用户名/.gitconfig
级别优先级(就近原则)
  1. 就近原则: 项目级别 优先于​ 系统用户级别 若两者同时存在,采用项目级别签名
  2. 仅有系统用户级别签名: 以系统用户级别为准
  3. 两者都不存在: Git 不允许提交,必须至少配置一种签名
记忆小结(速记版)
  • 签名 ≠ 远程仓库账号
  • 项目级:./.git/config
  • 全局级:~/.gitconfig
  • 优先级:项目 > 全局 > 无 → 报错

2.基本操作(状态查看、提交、历史、版本切换、恢复、比较)

2.1查看状态——确认当前状态(好习惯)

git status
👉 看看是不是有 new file:、Changes to be committed
作用:查看工作区、暂存区、本地库的状态
输出含义
  1. 当前所在分支
  2. 是否已提交
  3. 是否有可提交的文件及相应提示
最常用命令之一,随时可用

2.2添加到暂存区 / 从暂存区撤回

添加到暂存区
git add [文件名]
  • 将工作区中 新建或修改​ 的文件加入暂存区
  • 执行时会自动处理换行符转换
从暂存区撤回(不删除工作区文件)
git rm --cached [文件名]
  • 仅从暂存区移除
  • 工作区文件保持不变
📌 说明:
已 add的文件被修改后,无需再次 add,可直接 commit(前提是已在暂存区跟踪过)

2.3提交到本地库

标准提交(会进入 Vim 编辑提交日志)
git commit [文件名]
  • 与安装 Git 时选择的编辑器有关(Vim / VSCode 等)
  • 写完提交信息后::wq保存退出
带提交信息提交(推荐)
git commit -m "commit message" [文件名]
  • 不进入编辑器,直接提交
撤销工作区修改
git restore <文件名>
  • 丢弃工作区对该文件的修改
将暂存区文件撤回到工作区(unstage)
git reset HEAD <文件名>
  • 将暂存区的修改放回工作区

2.4查看历史记录(4 种方式)

方式一:完整日志
git log
多屏控制
  • 空格:向下翻页
  • b:向上翻页
  • q:退出
方式二:单行简洁显示
git log --pretty=oneline
  • 每行一条记录
  • 显示完整 hash + 提交日志
方式三:更短 hash
git log --oneline
  • hash 值缩短
  • 适合快速浏览
方式四:带指针移动信息(⭐推荐)
git reflog
  • 显示 HEAD 指针变化
  • 包含回退、前进所需的步数
HEAD@{移动到当前版本需要的步数}

2.5版本前进 / 后退(三种方式)

📌 本质:移动 HEAD指针
方式一:基于索引值(推荐 ✅)
git reset --hard a6ace91
  • 可前进也可后退
  • 精确、安全
方式二:使用 ^(只能后退)
git reset --hard HEAD^^
  • 一个 ^= 后退 1 步
  • n 个 ^= 后退 n 步
方式三:使用 ~(只能后退)
git reset --hard HEAD~3
  • ~n= 后退 n 步
  • 比 ^更适合大步回退

2.6reset 三个参数对比

参数
本地库 HEAD
暂存区
工作区
--soft
✅ 移动
--mixed
✅ 移动
✅ 重置
--hard
✅ 移动
✅ 重置
✅ 重置
📌 查看帮助:
git help reset

2.7 删除文件并找回

删除并提交到本地库
rm aaa.txt # 删除工作区文件 git add aaa.txt # 提交删除到暂存区 git commit -m "delete aaa" aaa.txt
找回文件(本质是版本回退)
情况 1:删除已提交到本地库
git reset --hard [历史版本索引]
  • 回到删除前的版本
情况 2:删除尚未提交到本地库
git reset --hard HEAD
  • 直接用当前 HEAD 覆盖工作区
📌 前提:删除前该文件已被提交到本地库

2.8比较文件差异

工作区 vs 暂存区
git diff [文件名]
工作区 vs 本地库历史版本
git diff HEAD^ apple.txt
git diff [版本索引] apple.txt
📌 支持:
  • HEAD
  • HEAD^
  • HEAD~n
  • 具体 commit hash

🔑 速记口诀

  • status:看状态
  • add:进暂存
  • commit:进仓库
  • log / reflog:看历史
  • reset --hard:切版本
  • diff:比差异
  • restore:丢修改

3.分支管理(checkout / switch / merge / conflict)

3.1什么是分支?

在版本控制过程中,使用多条线同时推进多个任务。分支是从主干(master/main)分离出的独立开发线路,允许开发者在不干扰主线的情况下进行功能开发、Bug 修复等操作。

3.2分支的好处

  1. 并行开发:多个功能、多个开发人员可以同时进行,提高开发效率。
  2. 风险隔离:某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
  3. 便于维护:可以快速创建 hotfix、feature等分支,不影响主线稳定版本。

3.3分支基本操作

操作
命令
说明
创建分支
git branch [分支名]
例:git branch hot_fix
查看分支
git branch -v
显示所有分支及其最新提交,*标记当前分支
切换分支
git checkout [分支名]git switch [分支名]
例:git checkout hot_fix(推荐使用 switch
合并分支
git merge [有新内容分支名]
必须先切换到接收修改的分支(通常是 master),再执行 merge
合并分支步骤详解
  1. 切换到被合并分支(接受修改的分支): git checkout master
  2. 执行合并命令(合并有新内容的分支): git merge hot_fix

3.4解决冲突(Conflict)

冲突产生的原因
  • 两个分支修改了同一个文件的同一位置,且修改内容不一致。
  • Git 无法自动判断应该保留哪一个版本,产生合并冲突。
冲突的标识
  • 分支名后会显示 | MERGING。
  • 冲突文件中会出现特殊标记: <<<<<<< HEAD master 分支的内容 ======= hot_fix 分支的内容 >>>>>>> hot_fix
冲突解决步骤
  • 第一步:编辑冲突文件,手动修改内容,删除 <<<<<<<, =======, >>>>>>>等特殊符号,确保代码符合预期。
  • 第二步:保存并退出编辑器。
  • 第三步:将解决后的文件添加到暂存区: git add [文件名]
  • 第四步:提交到本地库(注意:此时 commit 不能带具体文件名因为冲突解决后的 commit一定不能指定文件名): git commit -m "resolve merge conflict"

3.5分支使用建议

常见分支命名规范:
  • main / master:主分支(稳定版本)
  • develop:开发分支
  • feature-xxx:功能分支
  • hotfix-xxx:紧急修复分支
分支合并前建议:
  • 保证当前分支是 干净状态(git status)
  • 尽量先拉取最新代码
一句话总结
分支 = 并行开发 + 风险隔离;合并 = 分支整合;冲突 = 人工裁决。

4.常见补救命令

如果 origin已存在

git remote remove origin git remote add origin https://github.com/你的用户名/你的仓库.git

如果本地是 master,远端是 main

git push -u origin master:main

如果中文文件名乱码

git config --global core.quotepath false

🧠 一条命令一条意义(速记版)

命令
含义
git init
初始化本地仓库
git add .
加入暂存区
git commit -m "xxx"
提交到本地库
git remote add origin url
绑定远程仓库
git push -u origin master
推送到云端
git push
后续推送
git commit是把代码“存进本地”,git push才是“传到云端”。

二、Git显示中文乱码解决

1. 解决“文件名”乱码(最核心)

git config --global core.quotepath false
  • 作用:这是解决这种文件名乱码的关键。
  • 原理:Git 默认会把非 ASCII 字符(如中文)转换成八进制编码显示。这个选项告诉 Git:“遇到中文文件名,直接显示原样,别转码”。

2. 解决“图形界面/编辑器”乱码

git config --global gui.encoding utf-8
  • 作用:如果你以后用 Git 自带的图形界面(Git GUI)或者某些带界面的工具,这个设置能保证界面上的中文不乱码。

3. 解决“提交信息”乱码

git config --global i18n.commitencoding utf-8
  • 作用:保证你写的提交说明(比如 -m "第一次提交")在显示和存储时都是正常的 UTF-8 编码。
小贴士:这三个命令都是 --global(全局配置),意味着你以后在这个电脑上的所有 Git 项目都能受益,只需要配置这一次!
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐