【Git】02.Git常见命令+中文乱码解决 一、常见命令1.初始化只在第一次做git init(切换到目录右键Git Bash Here用liunx命令到对应目录下初始化)效果: 会在当前目录生成.get目录(隐藏的)1.1Git 设置签名本地库初始化后执行签名的作用作用区分不同开发人员的身份。形式 用户名tom Email 地址goodMorningatguigu.com重要辨析 这里的签名与登录远程库GitHub / GitLab / Gitee 等代码托管中心的账号、密码没有任何关系。 签名仅用于标识“是谁提交了这次代码”。签名级别与配置命令1. 项目级别 / 仓库级别不带--global作用范围仅在当前本地仓库内有效。命令git config user.name tom_pro git config user.email goodMorning_protaku.com信息保存位置./.git/config2. 系统用户级别带--global作用范围对当前操作系统用户下的所有仓库生效。命令git config --global user.name tom_glb git config --global user.email goodMorning_glbtaku.com信息保存位置~/.gitconfig # Windows 示例C:/Users/用户名/.gitconfig级别优先级就近原则就近原则 项目级别优先于​ 系统用户级别 若两者同时存在采用项目级别签名仅有系统用户级别签名 以系统用户级别为准两者都不存在 Git不允许提交必须至少配置一种签名记忆小结速记版签名 ≠ 远程仓库账号项目级./.git/config全局级~/.gitconfig优先级项目 全局 无 → 报错2.基本操作(状态查看、提交、历史、版本切换、恢复、比较)2.1查看状态——确认当前状态好习惯git status 看看是不是有 new file:、Changes to be committed作用查看工作区、暂存区、本地库的状态输出含义当前所在分支是否已提交是否有可提交的文件及相应提示最常用命令之一随时可用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 文件名丢弃工作区对该文件的修改将暂存区文件撤回到工作区unstagegit reset HEAD 文件名将暂存区的修改放回工作区2.4查看历史记录4 种方式方式一完整日志git log多屏控制空格向下翻页b向上翻页q退出方式二单行简洁显示git log --prettyoneline每行一条记录显示完整 hash 提交日志方式三更短 hashgit log --onelinehash 值缩短适合快速浏览方式四带指针移动信息⭐推荐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 reset2.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 支持HEADHEAD^HEAD~n具体 commit hash 速记口诀status看状态add进暂存commit进仓库log / reflog看历史reset --hard切版本diff比差异restore丢修改3.分支管理checkout / switch / merge / conflict3.1什么是分支在版本控制过程中使用多条线同时推进多个任务。分支是从主干master/main分离出的独立开发线路允许开发者在不干扰主线的情况下进行功能开发、Bug 修复等操作。3.2分支的好处并行开发多个功能、多个开发人员可以同时进行提高开发效率。风险隔离某一个分支开发失败不会对其他分支有任何影响。失败的分支删除重新开始即可。便于维护可以快速创建 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​合并分支步骤详解切换到被合并分支接受修改的分支 git checkout master执行合并命令合并有新内容的分支 git merge hot_fix3.4解决冲突Conflict冲突产生的原因两个分支修改了同一个文件的同一位置且修改内容不一致。Git 无法自动判断应该保留哪一个版本产生合并冲突。冲突的标识分支名后会显示 | MERGING。冲突文件中会出现特殊标记 HEAD master 分支的内容 hot_fix 分支的内容 hot_fix冲突解决步骤第一步编辑冲突文件手动修改内容删除 , , 等特殊符号确保代码符合预期。第二步保存并退出编辑器。第三步将解决后的文件添加到暂存区 git add [文件名]第四步提交到本地库注意此时 commit 不能带具体文件名因为冲突解决后的 commit一定不能指定文件名 git commit -m resolve merge conflict3.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远端是 maingit 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 项目都能受益只需要配置这一次