ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Git安装到日常命令全攻略:Windows/Mac/Linux一次搞定

Git安装到日常命令全攻略:Windows/Mac/Linux一次搞定 带新人入门Git我遇到的第一个坎往往不是命令记不住而是安装这一步就卡住了Windows用户装到一半不知道PATH该选哪个Mac用户发现系统自带了一个老版本GitLinux用户则被一堆依赖和权限问题劝退。等折腾完安装打开终端又不知道第一行命令该敲什么。这篇教程把我这几年带团队、帮同事处理Git环境踩过的坑全部整理出来从官网下载到日常命令从Windows到Linux一步步写清楚不重复网上一抓一大把的官方文档只讲实际操作时真正会用到的内容。无论你是刚接触版本控制的学生、从SVN切换过来的老程序员还是要帮整个团队统一开发环境的运维同学这篇文章都按平台拆好了路径。照着走基本可以一次性把环境配完后面用起来少踩一半坑。1. 为什么装个Git这么容易出问题先说清楚三平台差异Git本身是一个命令行工具核心压缩包也就几十兆但每个操作系统对待它的方式完全不同。搞清楚这个差异你才知道自己到底在装什么。Windows没有原生的包管理器大家一般去官网下一个图形化安装包双击一路点下去。问题就出在“一路点下去”——安装向导里有好几个选项选错了后面用起来会很难受。比如PATH配置选成“只在Git Bash里面用”那你打开CMD或者PowerShell敲git命令就会提示“不是内部或外部命令”很多新手在这里直接懵掉。再比如换行符转换策略选错提交代码时会出现整文件被标记为修改的诡异现象。Mac的情况比较特殊系统自带Git但版本通常比较旧。macOS自带的Git链接到了Xcode Command Line Tools你第一次在终端敲git时系统会弹窗提示安装开发工具装上之后确实能用但版本往往不是最新的某些新语法和新特性支持不完整。而且如果以后用Homebrew装了新版Git两套版本并存终端默认用的是哪一套取决于PATH的顺序这就容易造成“明明刚装了新版一敲git --version还是旧版本”的困惑。Linux用户反倒最省心因为主流发行版的软件源里都带Git一条命令就能装好。真正的坑在于两点一是服务器环境往往没有外网权限装不了在线软件源需要提前准备好离线安装包二是某些极简安装比如Docker容器里的Alpine没有默认编译器想源码编译Git会缺一堆依赖。理解了这三类平台的差异接下来的步骤就顺理成章了。2. Windows安装官网下载与安装向导每一步的含义2.1 从git-scm.com找到正确的安装包打开Git官网git-scm.com首页右侧会有一个大大的下载按钮会自动识别当前操作系统的位数并给出对应安装包。正常情况下我们选64-bit版就行。有一点要留意官网的下载服务器在国外国内某些网络环境下可能会比较慢如果长时间卡住可以换一个下载镜像站点很多国内高校和云厂商都有Git安装包的镜像下载完之后对比一下文件名和官方一致即可不放心的话校验一下SHA-256哈希值。安装包下载完成后双击运行。Windows的安装向导界面看起来挺长十几步但绝大多数选项保持默认即可。下面我重点说那几个会影响后续使用的。2.2 Windows安装向导中的关键选项第一处关键选项是“Select Components”选择组件。默认勾选的项目里包含“Git Bash Here”和“Git GUI Here”右键菜单这两个建议保留它们让你在资源管理器里右键就能打开Git命令行非常方便。还有一个“Add a Git Bash Profile to Windows Terminal”选项如果勾选了Windows Terminal里会多一个Git Bash的配置入口日常用Windows Terminal比较多的人建议勾上。第二处关键选项是“Default text editor”默认编辑器。Git在一些操作场景下会调用文本编辑器让你输入提交信息Win下可以选择Vim、Nano或者Notepad。如果你不熟悉Vim的操作方式我强烈建议选Nano或者你熟悉的编辑器否则后面在终端里提交代码时不小心进入了Vim界面不知道怎么保存退出只能干瞪眼。第三处关键选项是“Adjusting your PATH environment”调整PATH环境变量这是整个安装过程中最影响使用体验的一步。有三个选项只从Git Bash中使用Git从命令行以及第三方软件中使用Git推荐从命令提示符中使用Git但需要额外配置选第一个则只能在Git Bash里用GitWindows自带的CMD和PowerShell识别不了git命令。大部分场景下应该选第二个这样CMD、PowerShell、VS Code终端、JetBrains全家桶的终端都能直接调用git命令这也是我推荐给所有人的选择。第三个选项通常不要选它包含一些有覆盖风险的行为容易影响系统原有工具链。第四处关键选项是“Checkout Style”换行符转换方式。Windows系统默认换行符是CRLFLinux和Mac是LFGit需要在这两套体系之间做转换。默认选项是“Checkout Windows-style, commit Unix-style line endings”意思是从仓库检出代码时转成CRLF提交到仓库时转成LF。这个配置对单人使用没问题团队协作时往往需要统一后面我会专门讲换行符的坑。第五处关键选项是“Use Git from Git Bash only”之后的“Choosing the default behavior of git pull”默认选择第一个Merge即可不需要动。SSH可执行文件默认选“Use bundled OpenSSH”证书库选“Use the native Windows Secure Channel library”这些都是稳妥的默认值。2.3 安装完成后的验证安装完成后重启CMD或者PowerShell输入git --version能输出类似git version 2.4x.0.windows.1这样的信息就说明安装成功了。注意是重启终端工具之后在测试因为旧进程里的环境变量还是老一套不重启的话很可能提示找不到命令。Windows下我建议日常在Windows Terminal里操作Git比Git Bash的默认窗口好用得多字体渲染、多标签、复制粘贴都正常。如果你还没装Windows Terminal微软商店直接搜索安装即可。3. Mac安装自带Git、Homebrew与安装包的取舍3.1 macOS自带的Git为什么不够用Mac用户在终端里直接敲git系统有可能会弹出一个“需要安装命令行开发者工具”的提示。装完后git就能用了这是最省事的方案但有几个隐患第一自带的Git版本通常滞后于官方版本。Git的更新迭代虽然不至于讓老版本不能用但如果你要使用某些较新的功能比如更友好的冲突提示、新的协议支持老版本就没有。第二系统自带的Git链接到系统的SDK如果你之后用Homebrew或编译工具链更新了相关依赖偶尔会出现Git和系统库不匹配的告警。第三系统自带的Git路径在/usr/bin/git而这个路径是被系统保护的区域有些开发工具对Git的定制化扩展比如某些GUI客户端自带的Git插件装不到这里去。综合来说只在电脑上偶尔提交一下代码用自带的就够了但如果你是每天都要和代码打交道的开发者我建议用Homebrew装一份新版的。3.2 先装Homebrew再装Git路径问题一次解决Homebrew是macOS下最主流的包管理器装软件能省掉大量手工操作。如果你的电脑上还没有Homebrew安装命令在官网brew.sh上有终端里执行即可。Homebrew装完后执行brew install gitHomebrew会自动处理依赖装完后git会被放到/opt/homebrew/bin/gitApple Silicon芯片或者/usr/local/bin/gitIntel芯片。此时终端里敲git --version默认应该走的是Homebrew这一份因为Homebrew的目录在PATH里的优先级高于系统目录。如果你发现敲git --version还是系统自带版本说明环境变量PATH里系统路径排在前面。在~/.zshrc或者~/.bash_profile取决于你用的Shell里加上一行export PATH/opt/homebrew/bin:$PATH然后执行source ~/.zshrc再验证一次即可。3.3 安装包安装的适用场景Git官网也提供macOS的原生安装包.dmg格式下载后双击安装效果和Homebrew安装类似。它的优点是不依赖Homebrew适合那些不想装包管理器的用户。缺点也明显后续升级还是要手动去官网下载新包不像Homebrew一条命令搞定。如果你以后打算用Homebrew管理其他开发工具比如Node.js、Python我建议还是把包管理器装齐这会省下大量摸索时间。单独为了一个Git去下载dmg安装包属于可接受但不太推荐的选择。Mac安装完成后同样先验证版本git --version which gitwhich git显示的具体路径能帮你确认当前用的是哪一份。4. Linux安装发行版命令差异与源码编译兜底4.1 Debian/Ubuntu系的安装命令Debian和Ubuntu系使用apt包管理器安装Git只需要两条命令sudo apt update sudo apt install git -y第一行先刷新软件源索引第二行正式安装。如果安装时提示找不到软件包大概率是软件源没刷新或者你的源配置里缺少了某些组件可以检查一下/etc/apt/sources.list文件。装完后验证一下版本git --versionUbuntu的软件源版本更新频率不算快部分LTS版本自带的Git版本会比官方最新版落后一到两个大版本。对绝大多数使用场景来说没有影响但如果你需要某个新版本特性可以使用Git官方维护的PPA仓库或者源码编译。4.2 CentOS/RHEL系与Arch系CentOS 7用的还是yumCentOS 8及以上的RHEL系发行版换成了dnf但为了兼容centos下通常yum和dnf都能用# CentOS 7 / 旧版 sudo yum install git -y # CentOS 8 / RHEL 8 / Fedora sudo dnf install git -yCentOS是出了名的软件版本老这是系统定位决定的不追求新版本的话凑合用没问题。Arch系就完全不一样了软件源里的Git几乎和官方同步sudo pacman -S gitArch用户遇到问题最多的反而是编译环境因为有很多AUR包需要从源码编译但那属于另一件事了。4.3 源码编译离线环境下的兜底方案企业内网环境不能联网、或者需要指定一个特定Git版本的场景源码编译几乎是唯一选择。步骤不复杂但依赖得装齐# 先安装编译依赖Ubuntu/Debian示例 sudo apt install make gcc libssl-dev libcurl4-openssl-dev zlib1g-dev libexpat1-dev tcl gettext -y # 下载Git源码包解压后进入目录 ./configure --prefix/usr/local/git make -j$(nproc) sudo make install--prefix指定安装路径好处是你可以把Git装到一个独立目录后续切换版本时直接换目录就行。编译过程可能需要几分钟-j$(nproc)参数让多核CPU并行编译能明显提速。源码编译最大的坑在于依赖缺失最常见的报错是找不到libssl-dev或curl头文件把上面列的依赖一次性装齐能避开大多数此类问题。如果你的服务器是极简的容器环境连gcc都没有那就需要先安装build-essentialDebian系或者等同工具链。4.4 Linux下安装后的PATH问题用包管理器安装Git一般不存在PATH问题因为可执行文件被放到/usr/bin了默认就在PATH里。用源码编译安装且指定了独立目录的话就需要手动配置PATHecho export PATH/usr/local/git/bin:$PATH ~/.bashrc source ~/.bashrc装完后统一验证一下git --version能正常输出版本号即可。5. 装完先别急着写代码身份信息和换行符配置一次做对5.1 配置user.name和user.email否则提交不了Git每次提交代码时都会记录作者信息这个信息不是系统自动获取的而是需要你自己配置。如果没有配置提交时会报错并给出提示。所以要做的第一件事就是配置全局身份git config --global user.name 你的名字 git config --global user.email 你的邮箱注意这里的邮箱不建议随意填。如果后面要往GitHub或Gitee上推代码提交记录里的邮箱最好和平台账号绑定的邮箱一致这样提交记录能正确关联到你的账号头像。不少平台还有“邮箱隐私保护”选项可以按平台指引来。5.2 换行符配置团队协作最容易踩的坑Windows和macOS/Linux对换行符的处理方式不同这是一个特别容易出问题的地方。Git不管文件内容是什么默认都按文本方式处理所以换行符转换策略非常关键。Windows用户可以在全局配置里显式设置core.autocrlf true意思是检出代码时把LF转成CRLF提交时把CRLF转成LF。macOS/Linux用户设置core.autocrlf input检出时不转换提交时统一转成LF。# Windows git config --global core.autocrlf true # macOS / Linux git config --global core.autocrlf input如果团队项目里已经混入了错误的换行符单纯改这个配置不会自动修复历史文件需要额外处理。但对于新项目来说一开始就配置好这两条可以避免后续大量的误报修改。5.3 默认分支名和常用别名Git默认初始化仓库时分支名是master但近年新仓库默认分支名已经逐渐改成main。两种都能用唯一要注意的是别在推送远程仓库时搞混分支名。可以在全局配置里指定默认分支名git config --global init.defaultBranch main还可以给常用命令设置别名提高敲命令效率git config --global alias.st status git config --global alias.co checkout git config --global alias.br branch git config --global alias.cm commit设置完成后敲git st就相当于git status。这些配置都会写进~/.gitconfig文件你也可以直接打开这个文件查看和修改。5.4 验证现有配置用下面的命令查看当前所有Git配置git config --list如果你安装完Git忘了配置或者中途改了配置随时可以重新执行上面的git config --global命令覆盖旧值。6. 从git init到git push日常高频命令实战拆解6.1 初始化仓库与第一次提交先创建一个测试目录进入目录后初始化仓库mkdir demo-repo cd demo-repo git init初始化完成后仓库目录下会生成一个隐藏的.git文件夹Git的所有版本记录都存在这里。新建一个文件echo # Hello Git README.md用git status查看当前状态会看到README.md处于Untracked未跟踪状态。接下来把它加入暂存区git add README.md此时再执行git status文件会移到Changes to be committed区域说明它已经进入暂存区。提交git commit -m docs: init README-m参数后面跟提交信息这是给这次提交写的说明。一个规范的提交信息应该能说清楚这次改了什么我习惯用type: description的格式比如feat: 新增登录接口、fix: 修复空指针异常。6.2 查看提交记录与文件改动提交完想看看历史记录git log --oneline--oneline参数会压缩每条提交记录成一行只显示提交哈希前几位和提交说明。想看更详细的内容就执行git log。如果想知道某个文件相比上一次提交改了什么git diff HEAD -- README.md6.3 git commit --amend修改提交信息与补提交日常开发中经常会遇到一种情况刚提交完发现漏了一个文件或者提交信息写错了。这时候不需要重新提交一次用git commit --amend就能解决。假设刚才的提交忘了包含一个LICENSE文件可以这样操作git add LICENSE git commit --amend -m docs: init README and LICENSE执行完再看git log --oneline仍然只有一条提交记录但提交信息已经更新了而且还包含了LICENSE文件。这就是--amend的作用——它不是新增一条提交而是把当前暂存区的内容合并进上一条提交并允许你修改提交信息。这里有一个很重要的提醒git commit --amend会把原来的提交替换成一个新提交哈希值会变化所以只适用于尚未推送到远程的本地提交。如果这条提交已经被推送到远程并且别人也拉取了再使用--amend会导致历史不一致后续推送会被拒绝处理起来会相当麻烦。一句话总结本地提交随便改推送过后的提交别乱动。6.4 分支操作与合并分支是Git最强大的功能之一。查看当前所有分支git branch创建并切换新分支git checkout -b feature/login-b参数表示创建分支并马上切换过去。在新分支上做修改、提交然后切回主分支合并git checkout main git merge feature/login合并时如果没有冲突Git会直接完成如果有冲突Git会列出冲突文件需要手动修改后再提交。冲突不复杂但新手遇到容易慌后面我专门讲一下。7. 远程协作的钥匙配置Gitee SSH密钥并完成推送拉取7.1 本地仓库与远程仓库的连接方式局域网内自己用Git只靠本地仓库就够了但大多数场景是多人协作或备份到代码托管平台这就需要把本地仓库和远程仓库连起来。远程仓库的连接方式有HTTPS和SSH两种。HTTPS方式每次推送都要输账号密码或者配置凭据管理器记住SSH方式配置一次密钥后后续推送拉取不需要反复输密码体验好很多。7.2 生成SSH密钥SSH密钥分公钥和私钥。公钥放到远程平台私钥留在本地建立连接时用密钥对完成身份验证。生成密钥的命令ssh-keygen -t ed25519 -C 你的邮箱-t ed25519指定密钥算法-C是注释一般填邮箱。执行后会提示保存位置默认是~/.ssh/id_ed25519直接回车就行。接下来会提示输入密码短语passphrase可以留空直接回车不过为了安全我还是建议设一个哪怕短一点。生成完成后用命令查看公钥内容cat ~/.ssh/id_ed25519.pub输出是一长串以ssh-ed25519开头的文本复制这一整行内容。7.3 在Gitee上配置公钥登录Gitee点击右上角头像进入“设置”在左侧菜单里找到“SSH公钥”把刚才复制的公钥粘贴进去给公钥起一个标识名称比如“办公电脑”保存即可。配置完成后验证一下连通性ssh -T gitgitee.com第一次连接会提示是否信任主机输入yes回车。如果公钥配置成功会看到类似“欢迎使用Gitee”的提示。7.4 关联远程仓库并推送在Gitee上新建一个空白仓库创建完成后仓库页面会给出两种协议的地址。复制SSH地址形如gitgitee.com:用户名/仓库名.git在本地仓库里执行git remote add origin gitgitee.com:用户名/仓库名.git git push -u origin maingit remote add origin把远程仓库地址关联到本地的origin名称上git push -u origin main把本地main分支推送到远程-u参数同时把本地的main分支和远程的main分支建立跟踪关系这样以后直接输git push就能推送了。7.5 拉取远程更新与常见冲突提示团队协作时别人可能推送了新代码本地需要拉取最新内容git pull origin maingit pull实际上是两步合一步先git fetch从远程更新本地远程跟踪分支再git merge把远程分支合并到当前分支。如果本地和远程都修改了同一个文件的同一部分合并时就会冲突。Git会在冲突文件里插入类似这样的标记 HEAD 本地修改的内容 远程修改的内容 origin/main你需要手动保留正确的内容并删除标记保存文件后再执行git add 冲突文件 git commit -m merge: resolve conflict冲突并不可怕遇到几次自然就会处理了。8. 高频报错整理与日常救命小命令8.1 不是Git仓库fatal: not a git repository (or any of the parent directories): .git这个报错说明当前目录没有初始化Git仓库或者在子目录里找不到.git文件夹。解决方法是在项目根目录执行git init初始化或者确认当前工作目录是否选对了。8.2 身份信息未配置Author identity unknown *** Please tell me who you are.这个报错说明没有配置user.name和user.email按第5节的方法配置全局身份即可。8.3 推送被拒绝! [rejected] main - main (fetch first) error: failed to push some refs to ...远程仓库的提交比本地新Git拒绝直接推送。解决方法是先拉取再推送git pull origin main git push origin main如果拉取后发生冲突按第7.5节的方法处理。8.4 常见错误信息速查表把平时最容易遇见的几个错误和解决方案汇总成一张表方便收藏备用错误现象主要原因处理方式command not found: gitGit未安装或未加入PATH重新安装或检查PATH配置Permission denied (publickey)SSH公钥未配置或密钥不匹配检查公钥是否已添加到平台failed to push some refs远程有本地没有的提交先git pull再推送You have unmerged paths合并冲突未解决处理冲突后git add再git commitLF will be replaced by CRLF换行符转换警告正常提示一般无需处理8.5 几个关键时刻能救命的命令有些错误不是一下子能看清的这时候有几条命令能帮你迅速定位问题# 查看状态任何时候先跑它 git status # 查看当前分支与远程分支的关联关系 git branch -vv # 查看最近一条提交的具体改动 git show # 比较工作区与暂存区的差异 git diff如果你正在改一个功能临时要切分支处理紧急问题又不想把改到一半的代码提交上去可以用git stash把工作区暂时收起来git stash # 切分支干活干完切回来 git stash popgit stash pop会把之前保存的修改恢复到工作区整个过程干净利落。如果提交错了想撤回还没有推送过可以用软重置回退到上一次提交状态git reset --soft HEAD~1--soft参数表示只移动HEAD指针工作区和暂存区内容都保留改完代码后重新提交即可。如果用--hard工作区的未提交修改会被直接丢弃执行前务必确认内容不再需要了。8.6 日常使用最后一点建议从安装到日常使用这套流程我已经帮不少同事从头到尾梳理过很多遍。如果你看过这篇教程后还遇到问题我个人的建议是先跑git status和git log --oneline这两条命令能告诉你当前仓库的真实状态大多数问题都藏在这两条输出里。网上复制命令前先确认自己当前确实在目标仓库目录下很多报错其实就是目录选错了。另外Git命令行熟练之后再考虑引入GUI工具毕竟命令行是底层通用能力图形界面只是外层包装。最终你会发现命令行操作Git并没有想象中那么低效反而因为组合能力强在很多场景下比鼠标点来点去快得多。
返回列表