Git这个工具,用好了是效率神器,用不好就是一台时间粉碎机。网上讲Git入门的教程一抓一大把,但真正到项目协作、代码回滚、多环境发布、疑难报错排查的时候,很多同学还是会被一些莫名其妙的问题卡住半天。这篇文章我想把这么多年用Git踩过的坑、总结出来的习惯,以及那些网上不太容易一次讲清楚的细节,一次性整理出来。标题叫高级操作指南,内容实际上是从安装配置到日常疑难杂症全链条覆盖,适合已经会git add/commit/push、但想更深入理解Git的同学,也适合刚入坑想少走弯路的新手。全文没有任何花架子,基本都是可以直接落地的操作和思路。
1. 环境准备:装好Git,配置到位,后面才能少踩坑
1.1 安装那点事:版本选择与组件理解
先说安装。如果你用的是Windows,最主流的选择是装Git for Windows,它会顺带提供Git Bash这个终端环境。很多新手搞不清楚Git和Git Bash的关系:Git是一套版本控制工具,Git Bash是它自带的模拟Linux命令行的壳,在里面可以敲ls、cd、vim这些命令。另一个常见组合是TortoiseGit,也就是大家常说的“小乌龟”,它是把Git操作集成到Windows右键菜单里的图形客户端,适合不太习惯命令行的同事。但我个人的建议是:图形客户端可以用,但命令行一定要会。因为很多高级操作、报错信息和脚本自动化,图形界面是给不到你的。
安装时有一个关键点容易被忽略:环境变量。安装过程中会问你是否把Git加入PATH,这一步务必选上。如果之前安装时没勾选,后面在终端里敲git会直接提示“无法将git识别为cmdlet、函数、脚本文件或可运行程序的名称”。解决办法也不复杂:手动把Git的cmd目录加到系统PATH里,一般在C:\Program Files\Git\cmd。值得一提的是,现在新版Git安装器默认推荐配置已经比较合理,一路Next问题不大,但建议在安装时留意一下“启用符号链接”这类特性选项,默认关闭就好,以免权限或兼容性出幺蛾子。
Linux和macOS上安装则简单得多,Ubuntu/Debian用apt install git,CentOS/RHEL用yum install git,macOS可以用Homebrew的brew install git。装完以后先跑一句git --version确认版本。版本号别太旧就行,很多新特性和bug修复都在持续更新,长期停在2.x早期版本会导致一些兼容性问题。
1.2 全局配置:user、换行符与默认行为
装好Git之后,第一件事就是配置身份信息,否则commit时会提示找不到user.name和user.email。这里有个常见误区:很多同学随便填个名字就完事。但在公司协作或者开源项目中,commit记录是要跟你这个人长期绑定的,建议直接用真实姓名和常用邮箱,或者公司统一规定的账号格式。配置命令是:
bash复制git config --global user.name "你的名字"
git config --global user.email "you@example.com"
--global表示全局生效,不加这个参数则只对当前仓库生效。如果某个仓库需要单独的提交身份,可以在仓库目录内再执行一次不带--global的相同命令。
还有一个很多人容易踩的坑是换行符问题。Windows和Linux/macOS对换行符的处理不一样:Windows用CRLF,Linux和macOS用LF。如果没配置好,你会发现代码文件在提交时被整片标记为改动,或者出现“warning: LF will be replaced by CRLF”之类的提示。根本上这是core.autocrlf这个配置项在起作用,建议Windows用户设置为true,也就是提交时自动转换为LF,检出时转换为CRLF;macOS/Linux用户设置为input,只做提交转换,检出不做转换。配置如下:
bash复制git config --global core.autocrlf true
1.3 中文乱码、显示别名与GUI工具参数
再来说说中文显示问题。很多人在终端里看git status或git diff时,中文文件名会变成一堆八进制的转义字符,比如"\346\265\213\350\257\225.txt"。这是因为Git默认对非ASCII字符做了转义处理,避免在某些终端下乱码。解决方法很简单,把core.quotepath关掉:
bash复制git config --global core.quotepath false
设置完之后,中文文件名就会正常显示了。顺带一提,你在一些IDE或图形工具的执行日志里可能会看到一长串参数,比如git -c diff.mnemonicprefix=false -c core.quotepath=false --no-optional-locks。这是很多GUI客户端调起Git时自动注入的配置,目的是把diff输出的前后缀改成`a
