拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Git从入门到实战:核心命令、分支协作与疑难杂症排查

1. 别急着敲命令先把 Git 这套逻辑搞明白Git 这东西说是版本控制工具其实更像一个装了时间机的文件夹。你写的每一版代码、改掉的每一行、删掉的每一个文件只要提交过都能翻回来。我第一次接触 Git 是在 B 站刷到一个叫莫烦 Git 教程的视频合集AV 号 8727109当时跟着敲了几条命令感觉也就那样。直到后来自己维护项目、跟人协作、把代码搞崩又救回来才真正理解这套工具的价值。这篇博文我不打算照搬任何一份官方文档而是结合我这些年在 Windows 和 Linux 下折腾 Git 的实操经验把安装、配置、常用命令、疑难杂症这一条线完整串一遍。如果你是刚接触 Git 的初学者跟着走一遍就能上手如果你已经用过一段时间但总被各种报错卡住建议直接跳到第 4 章翻排查表。先给没接触过 Git 的人打个比方。你写论文的时候是不是会存出“初稿.doc”“初稿修改2.doc”“最终版3.doc”这种文件Git 干的事就是帮你自动管理这些“版本”而且更智能——它只记录每次改动的差异而不是每版都存一份完整文件所以仓库再大也不会爆炸。你随时可以回到任意一次提交也可以拉出一条分支进行实验实验成功再合并回来玩砸了直接删掉分支主分支毫发无损。这套逻辑说起来简单真正用顺需要过三关第一关是搞懂三个存储区工作区、暂存区、版本库第二关是掌握日常命令流add、commit、push、pull第三关是学会分支协作和冲突处理。莫烦那套教程最让我认可的地方就是它没一上来就扔一堆命令而是先用动画把这三关的底层逻辑讲清楚了。本文会沿着同样的思路但补上了更多我在生产环境中踩过的坑。2. 从零搭建安装 Git 与环境配置全流程2.1 Windows 下安装 Git 的正确姿势去 Git 官网下载 Windows 安装包时你会看到两个版本32-bit 和 64-bit。现在基本都是 64 位系统直接选 64-bit 就好。下载速度如果不太理想可以找国内镜像源这里不展开说自己搜一下就有。安装过程大部分步骤一路 Next 就行但有几步需要稍微留神。第一在选择“Select Components”那一步建议勾上“Git Bash Here”和“Git GUI Here”这样你在文件夹里右键就能直接打开 Git 命令行非常方便。第二到“Choosing the default editor”那一步默认是 Vim如果你不熟悉 Vim 的退出方式相信我第一次用 Vim 的人都会被困在编辑器里出不来建议改成 Notepad 或者 VS Code。第三在“Adjusting your PATH environment”这一步务必选第二项“Git from the command line and also from 3rd-party software”这样 Git 命令才能在 CMD 和 PowerShell 里直接使用。注意安装完成后记得打开一个新的终端窗口输入git --version验证一下。如果提示“无法将 git 项识别为 cmdlet、函数、脚本文件或可运行程序的名称”大概率是 PATH 环境变量没生效或者安装时选错了 PATH 选项。这种问题不用重装手动把 Git 的安装目录比如C:\Program Files\Git\cmd加到系统 PATH 里就行。2.2 环境变量配置与 Git Bash 的妙用Git 默认给你装了三个东西Git Bash模拟 Linux 终端的命令行、Git GUI图形界面说实话不太好用、Git CMDWindows 命令行的 Git 封装。我日常用得最多的是 Git Bash原因很简单它支持 Linux 的ls、grep、sed这些命令还支持ssh-agent处理 SSH 密钥比在 CMD 里舒服得多。环境变量配置这块实际上很少需要手动改 PATH因为安装时已经处理好了。更需要关注的是 Git 的全局配置。装完 Git 之后第一件事就是设置用户名和邮箱因为你每次提交代码Git 都要把这两个信息写进提交记录里。git config --global user.name 你的名字 git config --global user.email 你的邮箱example.com这里有个常见的坑如果你配置的邮箱跟 GitHub/Gitee 账号不一致提交记录虽然能出现在仓库里但不会关联到你的账号头像上。特别是用 Gitee 的时候很多小白提了代码却发现贡献图上什么都没有十有八九就是邮箱对不上。2.3 小乌龟TortoiseGit值不值得装热词里有“git小乌龟”也就是 TortoiseGit。这是一个把 Git 操作集成到 Windows 右键菜单的图形化工具。装上之后你在文件夹里右键就能看到“Git Commit”“Git Pull”“Git Push”等选项不用记忆任何命令。我的看法是小乌龟适合完全不习惯命令行的新手或者只需要在 Windows 上做简单提交的场景。但它的缺点也很明显——对于分支操作、冲突解决这种复杂场景图形界面反而更难理解底层逻辑。而且一旦你切换到 Mac 或者 Linux 工作小乌龟就用不了了你又得从头学命令。个人更推荐的方式是入门阶段用小乌龟看看 Git 到底干了什么但顺手把git add、git commit、git push、git pull这四条命令记熟。它们就是 Git 的高频核心五分钟就能练成肌肉记忆。等你对工作区和暂存区的关系有感觉了再回头用命令行会非常顺畅。3. 核心命令与高频场景实操从提交代码到分支协作3.1 初始化仓库与提交的第一条命令假设你有一个项目文件夹想让 Git 接管它的版本管理。在 Git Bash 里进入这个文件夹执行git init这条命令会在当前目录下生成一个隐藏的.git文件夹这就是你的版本库。所有提交的历史记录都存在这里面。需要注意的是从这一刻起这个文件夹就“活”了你在里面做的任何修改都可以被 Git 追踪。Git 的日常操作流可以用三句话概括git add把改动放进暂存区git commit把暂存区的内容固化成版本git push把版本推送到远程仓库。这三步的对应关系建议你用“购物车”来理解add是往购物车里放商品commit是结账生成订单push是把订单送往仓库中心。你当然可以反复往购物车里加东西再拿出来但只要没结账订单就不存在。实际操练一下。创建几个测试文件后运行git add . # 把所有改动加入暂存区 git commit -m 第一次提交 # 提交并写清楚备注git add .里的点表示当前目录下所有改动过的文件。如果你只想提交特定文件用git add 文件名就行。commit -m后面引号里的内容就是提交说明这一步极其重要——我见过太多人写“11”“22”“update”等到项目出问题想回退版本时看着一屏无意义的提交记录根本不知道该回到哪里。3.2 远程仓库配置与 Gitee SSH 密钥要把代码备份到云端或者跟同事协作你需要一个远程仓库。国内最常用的是 Gitee配置 SSH 密钥是免密操作的关键。所谓 SSH 密钥其实就是一对加密钥匙公钥放到 Gitee 服务器上私钥留在本地。推送代码时Git 用私钥签名服务器用公钥验证验证通过就不用输密码了。生成密钥的命令是ssh-keygen -t rsa -C 你的邮箱example.com -b 4096一路回车就行默认会在用户目录的.ssh文件夹下生成两个文件id_rsa私钥和id_rsa.pub公钥。用cat ~/.ssh/id_rsa.pub把公钥内容打印出来复制整段内容粘贴到 Gitee 的“设置 - SSH 公钥”里。配置完成后测试一下是否连通ssh -T gitgitee.com第一次执行会提示是否确认连接输入 yes 并回车。如果看到类似 “Hi xxx! Youve successfully authenticated” 的信息说明 SSH 配置成功。之后就再也不用每次 push 都输账号密码了。提示千万别把id_rsa私钥文件发给任何人也别传到代码仓库里。私钥泄露等于把你的代码仓库大门钥匙交给了别人。我之前遇到过一位同事不小心把.ssh文件夹提交到了 Git 仓库虽然很快删除了但密钥等于已经暴露只能全部重新生成。3.3 分支管理实验与主线互不干扰分支是 Git 最强大的特性也是新手最容易被绕晕的地方。用一句话解释分支就是从一个时间点分裂出来的平行宇宙。你在分支里怎么折腾都不会影响原宇宙玩明白了再合并回来。日常开发的标准姿势是git branch feature-login # 创建分支 git checkout feature-login # 切换到该分支 git checkout -b feature-login # 创建并切换一步到位等你在 feature-login 分支上开发完需要合并回主分支时先切回主分支再执行 mergegit checkout main git merge feature-login如果两个分支改了同一个文件的同一行Git 会提示冲突。这时候别慌冲突文件里会出现一堆 HEAD和 feature-login的标记中间夹着的就是两边各自的内容。你需要手动决定保留哪部分、删除哪部分然后把冲突标记删干净再执行git add和git commit。接热词里的“git worktree”说一下。git worktree是一个很实用的功能它允许你在同一个仓库的不同分支上同时干活。什么意思呢比如你正在 feature-A 分支上开发突然有个紧急 bug 需要切换到 main 分支去修。如果你直接git checkout mainGit 会提示有未提交的改动要么提交要么 stash。有了 worktree 就不用纠结了git worktree add ../hotfix-branch main这个命令会在项目目录旁边新建一个文件夹把 main 分支的最新代码检出来放在里面。你可以在原目录继续搞 feature-A在旁边的目录修复紧急 bug两个互不干扰。这个功能我是在维护多个线上版本时才开始用的发现真的能省掉大量来回切换和 stash 的无效操作。3.4 进阶操作commit --amend 与回滚技巧热词里专门提到了git commit --amend这个命令负责修改上一次提交的信息或者把新的改动追加进上一次提交里。我举个非常实用的场景你在提交代码后发现少加了一个文件又不想为了一个文件多造一条提交记录就可以这样操作git add 漏掉的文件 git commit --amend -m 修改后的提交说明执行完后你会发现提交历史里没有多出第二条记录而是把刚才那个提交“替换”了。注意这个操作会改变提交 ID所以只适用于还没有 push 到远程的提交。如果你已经 push 了再使用 amend 然后再强制推送会让同事的仓库同步出问题除非能确认仓库只有你一个人在维护否则少碰强制推送。回滚操作也是高频需求。想撤销工作区未暂存的所有改动用git checkout -- 文件名想撤销暂存区的文件用git reset HEAD 文件名想回退到某个历史提交用git reset --hard 提交ID。最后一个命令非常危险因为--hard会直接丢弃所有未提交的改动执行之后神仙都救不回来。更保险的做法是用git revert 提交ID它会生成一条新提交来反向取消旧提交的内容历史记录清晰也不影响其他人的仓库。3.5 拉取远程代码与常见 IDE 集成“git拉取远程代码到本地”对应两条命令git pull和git clone。如果远程仓库还不存在本地副本用git clone 仓库地址一次搞定。如果本地已经 clone 过了只是需要同步最新代码在项目目录里执行git pull就行。IDE 集成这块热词里提到“idea怎么用git提交代码”和“vscode git插件”。VS Code 自带 Git 面板左边栏那个分支图标就是。改完文件后在源码管理面板里能看到改动列表填上提交信息点“提交”再点“同步更改”就完成了推拉操作。IDEA 里则是通过 VCS 菜单操作也可以在设置里配置 Git 路径然后把代码托管平台账号关联上。IDE 集成的底层依然是命令行的逻辑只是把add、commit、push封装成了按钮。当你用 IDE 遇到翻车情况比如拉取冲突、分支切不动最终还是得回到 Git Bash 里敲命令解决。所以我的建议是IDE 按钮正常用但命令行技能始终要留着兜底。4. 常见问题与疑难杂症排查实录Git 用久了多少会遇到一些诡异的报错。下面整理的是高频问题里最有代表性的几个都是我在实际项目中踩过并且已经解决掉的。4.1 fatal: not a git repository这个报错翻译过来是“当前目录不在任何 Git 仓库的管辖范围内”。出现原因通常是三种一是你确实不在仓库目录里比如在/home/user根目录敲了git status二是仓库目录被移动过导致.git路径失效三是.git文件夹被误删了。排查思路很简单先执行pwd确认自己所在位置再看目录下有没有.git用ls -a查看。如果不是仓库目录往子目录里找或者切回项目根目录如果.git真的没了只能重新git init但历史提交记录也就没了。平时注意把.git当作核心资产看待别手滑删了。4.2 无法将“git”项识别为 cmdlet这个报错分词条完整版是“git : 无法将“git”项识别为 cmdlet、函数、脚本文件或可运行程序的名称”。基本可以确定是环境变量 PATH 的问题。Windows 下检查两件事一是安装 Git 时 PATH 选项是否选对了应该选 “Git from the command line”二是当前终端是不是安装 Git 之前就打开的旧窗口如果是关掉重开一个。手动修复的步骤是右键“此电脑” - 属性 - 高级系统设置 - 环境变量在系统变量里找到 Path编辑并确认包含C:\Program Files\Git\cmd这个目录。没有的话就新建一条。保存后重开终端问题通常就解决了。4.3 login failed. check api token or gitlab version这个报错一般出现在 IDE比如 VS Code 的 GitLab 插件尝试连接 GitLab 时。含义是登录验证失败需要检查 API Token 或者 GitLab 版本兼容性。我遇到过的原因是 GitLab 版本过旧而插件的 API 调用方式已经更新二者不匹配。解决办法分三步排查第一步确认账号密码或访问令牌Personal Access Token是否正确新生成一个 token 试试第二步检查 GitLab 版本和 IDE 插件的版本如果有更新先升级插件第三步实在不行就把插件彻底禁用改用命令行推送拉取在 IDE 里用终端面板操作完全可行。4.4 Git 目录泄露如何处理热词里有“git目录泄露如何下载”这涉及的是安全意识问题。所谓目录泄露就是项目的.git文件夹被意外部署到了服务器上别人通过浏览器直接访问https://你的域名/.git/就能看到你的提交历史、源码甚至配置密钥。这通常是因为部署时把整个开发目录直接传到了线上而没有用构建产物目录。处理方式分两层。如果你是开发者发现自己的站点存在这个问题首先把.git目录从 Web 根目录移除然后立即更换仓库里可能暴露的所有敏感凭据数据库密码、API Key、SSH 密钥等因为攻击者已经可以下载完整历史了。如果问题不严重、没有包含敏感信息删除目录并检查访问日志确认没有被人扫描下载过即可。如果你是安全方向的学习者想检测一个站点是否存在这个漏洞直接在浏览器访问路径看是否返回 403 或 200 响应但千万不要利用这个漏洞做任何破坏性操作这是底线。4.5 热词里的“git -c diff.mnemonicprefixfalse”是什么这个长参数出现在 VSCode 等 IDE 的 Git 扩展执行命令时。它本身不是一条命令而是在给 git 传配置项。-c表示临时设置某个配置diff.mnemonicprefixfalse表示关闭“用字母代替文件路径前缀”的显示方式从而让 diff 输出里明确显示a/、b/这样的传统前缀core.quotepathfalse表示关闭路径中文转义否则 Git 会把中文文件名显示成八进制转义符--no-optional-locks表示在执行命令时跳过一些不必要的文件锁操作避免因为只读操作而修改仓库元数据。这个东西大家不用去记IDE 会自动拼接。但有一点值得知道如果你在命令行里想让中文文件名正常显示可以提前配置git config --global core.quotepath false。这样git status里看到的就是正常的中文文件名而不是一堆乱码转义体验会好很多。4.6 其他高频问题的速查表问题现象可能原因解决办法push 被拒non-fast-forward远程有新提交本地落后先git pull合并再 push提交到了错误的分支忘了切换分支git reset --soft HEAD^撤回后切分支commit 信息写错了提交说明有误git commit --amend修改合并时冲突太多改动范围重叠大手动编辑冲突文件逐个解决克隆仓库特别慢网络环境问题使用镜像站加速误删了未提交的文件工作区修改丢失git checkout -- 文件名恢复5. 从教程到实战一条建议路径很多人在 Git 学习上的痛苦不是教程太少而是“看懂了”和“会用”之间隔着一道坎。看视频的时候觉得每一步都清晰等关掉视频自己操作第一步git init该在哪执行都能想半天。我自己走过来的经验是找一个小得不能再小的项目——哪怕是一个只有三个纯文本文件的文件夹——从头到尾走一遍完整的 Git 流程。初始化仓库修改文件提交建分支在分支里改点东西合并回主分支推到 Gitee 远程仓库再从另一台设备把仓库克隆下来。整个过程走完你对 Git 的碎片化认知就会连成一条线。莫烦那套教程的价值就在于它把这条线铺得很平适合作为第一遍的入门资料。但教程毕竟是好几年前的了里面的 Git 版本比较老界面也有变化部分命令在新版本里已经有了替代方案。所以正确用法是跟着教程学习核心概念实际敲命令时以官方文档和当前版本的git --help为准。另外补充一个功能层面的小建议Git 不只是代码工具任何需要版本管理的文本类内容都可以用它。我见过有人用 Git 管理自己的博客草稿、简历版本、读书笔记甚至论文写作过程。只要你想保留每次修改的痕迹Git 就是最好的工具。这个技能不挑行业、不挑语言值得花一个周末把它彻底学会。等到你某天把代码改得一团糟随手一条命令回到昨天的干净状态时就会明白当初那些命令没白学。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门