Git工作流程与常用指令——从本地开发到远程协作作者Ye Shun日期2026-04-22一、前言对于很多初学者来说Git 最让人困惑的地方并不是“命令太多”而是不知道代码现在在哪个阶段不清楚什么时候该add不明白commit和push的区别遇到多人协作、分支开发、上传项目时容易手忙脚乱其实Git 的核心工作流程并不复杂。只要你先理解 Git 的“四个区域”再结合几个常见工作场景去练习很多命令就会自然串起来。这篇文章会从以下几个方面系统介绍 GitGit 的基本工作流程工作区、暂存区、本地仓库、远程仓库的含义常见核心命令的作用本地项目首次上传到 GitHub/GitLab 的完整流程已有项目的协作开发流程stash、pull、fetch、merge等常见场景指令日常使用 Git 的实战建议如果你想把 Git 理解成一句话那就是修改代码挑选要提交的改动保存为历史版本再同步到远程仓库。二、一张图看懂 Git 工作流程下面这张流程图展示了 Git 最核心的工作链路git addgit commitgit pushgit pull / git fetch工作区 Working Directory暂存区 Staging Area本地仓库 Local Repository远程仓库 Remote Repository你也可以把它想象成“写作业并交给老师”的过程。三、Git 的四个核心区域1. 工作区Working Directory——你的书桌这是你实际修改文件的地方。你在这里写代码新建文件删除文件修改配置也就是说只要你在项目目录里动了文件这些变化首先都发生在工作区。2. 暂存区Staging Area——你的待邮寄篮子当你觉得某些改动已经准备好提交时可以先把它们放进“暂存区”。对应命令是gitadd文件名或者gitadd.这一步的意义不是“提交”而是先告诉 Git哪些改动要进入下一次提交也正因为有暂存区你可以做到一个文件改了很多内容但只提交其中一部分多个文件都改了但只挑出这次真正相关的改动来提交3. 本地仓库Local Repository——你的个人保险箱当暂存区准备好之后就可以正式提交gitcommit-m提交说明这一步会把当前暂存区里的内容保存成一个历史版本。提交之后你就拥有了一个可以回溯、比较、恢复的版本记录。4. 远程仓库Remote Repository——老师的收件箱远程仓库通常托管在GitHubGitLabGitee公司内部 Git 服务当你想把本地提交同步到远程时可以使用gitpush它的意义包括备份代码与团队共享进度触发代码审查或 CI/CD 流程四、Git 的核心工作流程Git 最基础的日常流程可以概括为修改代码 - git status - git add - git commit - git push这几个动作的真实含义分别是修改代码在工作区完成开发git status查看哪些文件变了、哪些文件已暂存git add把要提交的改动放入暂存区git commit把暂存区内容保存为本地版本git push把本地版本上传到远程仓库其中git status虽然不是“流程图上的主角”但它几乎是最值得养成习惯的命令。建议在很多关键节点都执行一次改完代码后add之前commit之前push失败后五、常见 Git 命令速览下面是日常开发最常见的一组 Git 命令。命令作用常见场景git clone克隆远程仓库到本地参与已有项目git init初始化本地 Git 仓库本地项目首次接入 Gitgit status查看当前改动状态日常必查git add将改动加入暂存区提交前准备git commit提交到本地仓库保存版本历史git push推送到远程仓库上传代码git pull拉取并合并远程更新同步团队代码git fetch仅获取远程更新不自动合并想先看变化再决定git merge合并分支合并功能分支或远程更新git branch查看或管理分支多分支开发git switch/git checkout切换分支在不同任务间切换git stash临时保存当前未提交改动中途插入紧急任务git log查看提交历史回顾版本git remote -v查看远程仓库地址检查是否连接远程六、场景一参与一个已有的远程项目如果你要加入一个已经存在的 GitHub 或 GitLab 项目第一步通常是克隆仓库gitclone https://github.com/username/repo.gitcdrepo然后建议先看看当前分支和状态gitbranchgitstatus如果项目不允许直接在main或master上开发通常会新建一个功能分支gitswitch-cnew-feature如果你的 Git 版本较老也可以使用gitcheckout-bnew-feature接下来就是标准开发流程gitadd.gitcommit-mAdd new featuregitpush-uorigin new-feature其中-u的作用是建立本地分支和远程分支的追踪关系后续再推送时通常直接git push就行。七、场景二把本地已有项目第一次上传到 Git这是很多人最常遇到的场景之一比如你本地已经写好了一个课程作业项目你有一个 Python、Java、前端项目想上传到 GitHub你希望给项目做版本管理并分享给别人完整流程如下。1. 先在远程平台创建一个仓库在 GitHub、GitLab 或 Gitee 上先新建一个仓库。建议第一次上传时创建“空仓库”也就是不自动添加 README不自动添加.gitignore不自动添加 License这样可以避免本地仓库和远程仓库初始历史不一致的问题。2. 进入本地项目目录并初始化 Gitcdyour-projectgitinit3. 检查哪些文件应该提交正式提交前建议先准备.gitignore避免把不该上传的内容提交上去例如node_modules/venv/.idea/dist/临时缓存文件密钥、账号配置文件一个简单示例如下node_modules/ venv/ __pycache__/ .idea/ .vscode/ .env dist/ build/然后查看状态gitstatus4. 提交第一次版本gitadd.gitcommit-mInitial commit5. 绑定远程仓库gitremoteaddorigin https://github.com/username/repo.git可以检查是否绑定成功gitremote-v6. 推送到远程主分支如果你希望主分支叫main可以执行gitbranch-Mmaingitpush-uorigin main到这里本地项目就已经成功上传到远程仓库了。7. 如果第一次推送失败怎么办有一种常见情况是你在远程平台创建仓库时顺手勾选了 README 或.gitignore于是远程仓库已经先有了一次提交这时本地首次push可能会被拒绝更稳妥的处理方式通常有两种做法 A重新创建一个空仓库这最适合初学者流程最干净。做法 B先把远程内容拉下来再合并gitpull origin main --allow-unrelated-historiesgitpush-uorigin main不过如果你是第一次接触 Git更建议优先使用“空仓库 本地首次上传”的方式减少额外复杂度。8. 一个从零开始的最小示例把本地Test文件夹上传到 GitHub如果你是第一次练习 Git可以直接照着下面这个最小流程操作一遍。第 1 步先在本地创建一个文件夹例如先创建一个叫Test的文件夹。你可以直接在资源管理器里新建也可以在cmd中执行mkdirTest第 2 步进入cmd切换到目标目录假设你的文件夹路径是D:\desktop\Test那么可以执行cd/d D:\desktop\Test这里使用cd /d是因为在 Windows 的cmd中如果涉及磁盘切换写法会更稳妥。第 3 步初始化 Git 仓库gitinit执行完成后当前目录下会出现一个.git文件夹。它通常是隐藏的你需要开启“显示隐藏文件”才能看到。第 4 步在Test目录下创建一个测试文件比如可以新建一个README.md你可以手动创建也可以在cmd里用下面的方式快速生成echo# Test README.md第 5 步把所有文件加入暂存区gitadd.这里的意思是把当前目录下所有需要纳入版本管理的改动一起加入暂存区第 6 步提交到本地仓库gitcommit-m初始化项目这一步表示你已经把当前版本正式保存到了本地 Git 历史中。第 7 步在 GitHub 上创建一个新的远程仓库接着打开 GitHub 官网在个人仓库里新建一个仓库。为了方便理解建议远程仓库名和本地文件夹名保持一致例如都叫Test尽量创建为空仓库不要勾选自动生成 README第 8 步把本地仓库和远程仓库关联起来在cmd中执行gitremoteaddorigin https://github.com/xxxx/Test.git其中origin是远程仓库的默认别名https://github.com/xxxx/Test.git需要替换成你自己的 GitHub 仓库地址第 9 步把主分支统一命名为maingitbranch-Mmain第 10 步首次推送到 GitHubgitpush-uorigin main这里的-u表示建立追踪关系。之后如果你还在这个分支上继续提交通常直接执行gitpush就可以了。整个流程汇总mkdirTestcd/d D:\desktop\Testgitinitecho# Test README.mdgitadd.gitcommit-m初始化项目gitremoteaddorigin https://github.com/xxxx/Test.gitgitbranch-Mmaingitpush-uorigin main如果你能完整跑通这一套流程就说明你已经掌握了“本地项目首次上传到 GitHub”的最基础版本。八、场景三日常开发中的标准分支工作流在团队协作中最推荐的方式通常不是直接在主分支开发而是先更新主分支从主分支切出新分支在新分支完成开发推送分支创建 Pull RequestPR或 Merge RequestMR一个典型流程如下1. 先切到主分支并同步最新代码gitswitch maingitpull origin main2. 新建功能分支gitswitch-cfeature/login-page3. 开发并提交gitadd.gitcommit-mImplement login page4. 推送到远程gitpush-uorigin feature/login-page5. 在平台上发起 PR / MR通常在 GitHub 或 GitLab 页面上发起代码审查邀请其他成员审核。这样做的好处是不影响主分支稳定便于代码审查更容易追踪每个功能对应的提交历史九、场景四改了一半突然要切去做别的任务这是git stash最典型的使用场景。假设你现在正在写一个功能但还没写完不适合提交这时领导或同学让你紧急修一个线上 Bug。如果你直接切分支未提交改动可能会干扰新任务。这时可以先把当前修改“藏起来”gitstash查看当前 stash 列表gitstash list修完紧急任务之后再把之前的改动恢复出来gitstash pop如果你只是想恢复但不删除 stash 记录可以使用gitstash apply这个功能非常适合多任务切换改动写到一半但不能提交临时切回主分支处理其他问题十、场景五如何同步远程最新代码多人协作时你不能只顾着本地写代码还要及时同步远程更新。这里经常会出现三个容易混淆的命令git pullgit fetchgit merge1.git pull拉取并合并gitpull origin main它相当于两步操作的组合先从远程获取最新内容再自动尝试合并到当前分支优点是方便缺点是有时候你还没看清变更就已经开始合并了。2.git fetch先取回来但不急着合并gitfetch origin执行后远程更新会被拉到本地但不会直接改动你当前分支的工作内容。这适合更稳妥的做法gitfetch origingitlog--oneline--graph--allgitmerge origin/main也就是说先看看远程更新了什么确认没问题再自己决定是否合并3.git merge把一个分支合并到当前分支例如你现在在main分支想把new-feature合并进来gitmerge new-feature这通常出现在本地分支合并先fetch再手动合并PR 合并后同步远程主分支到本地十一、场景六PR 合并后本地应该怎么处理假设你在远程平台已经把feature/login-page合并到main那么本地通常会做这几步1. 切回主分支并拉取最新代码gitswitch maingitpull origin main2. 删除本地功能分支gitbranch-dfeature/login-page3. 如果不再需要远程分支也可以删除gitpush origin--deletefeature/login-page这样能保持分支整洁避免仓库里堆满历史功能分支。十二、场景七遇到合并冲突怎么办合并冲突并不意味着仓库坏了它只是说明你和别人改了同一个位置Git 无法自动判断该保留谁的内容常见处理流程如下1. 先查看状态gitstatusGit 会提示哪些文件存在冲突。2. 打开冲突文件手动修改你会看到类似这样的标记 HEAD 当前分支内容 另一分支内容 feature/login-page你需要手动决定保留哪一部分是否合并两边内容修改完成后删除这些冲突标记。3. 重新加入暂存区并提交gitadd.gitcommit-mResolve merge conflict十三、场景八提交错了、加错了怎么补救Git 的一个好处就是大部分错误都能修。1.add错文件了撤回暂存gitrestore--staged文件名如果想撤回所有已暂存内容gitrestore--staged.2. 提交信息写错了修改最近一次提交说明gitcommit--amend-m新的提交说明如果这次提交已经推送到远程再修改要格外小心因为可能影响别人协作。3. 工作区改乱了想恢复某个文件gitrestore 文件名这会丢弃该文件在工作区中的未提交修改所以执行前一定确认清楚。十四、一个最常用的 Git 日常模板如果你还没有形成肌肉记忆可以先记住这一套最通用流程场景 A已有仓库开发gitpull origin maingitswitch-cfeature/xxx# 开发代码gitstatusgitadd.gitcommit-mFinish xxxgitpush-uorigin feature/xxx场景 B本地项目首次上传cdyour-projectgitinitgitadd.gitcommit-mInitial commitgitbranch-Mmaingitremoteaddorigin https://github.com/username/repo.gitgitpush-uorigin main场景 C临时切任务gitstashgitswitch main# 处理其他任务gitswitch 原来的分支名gitstash pop十五、实战中的几个建议1. 先学会看git status很多 Git 初学者的问题本质上都可以先靠git status判断。2. 不要把所有内容都无脑git add .虽然git add .很方便但在正式项目里建议先确认一下有没有把临时文件带进去有没有把密钥、配置、日志文件提交进去3. 提交信息要写清楚比起gitcommit-mupdate更推荐gitcommit-mFix login validation bug或者gitcommit-mAdd course recommendation page好的提交信息能帮助你和团队成员快速理解每次改动的目的。4. 优先使用分支开发不要把主分支当成“随便改”的试验场。尤其在多人协作、课程项目、竞赛项目里分支管理会大幅减少风险。5. 上传前注意.gitignore以下内容一般不建议提交依赖目录编译产物临时缓存本地 IDE 配置密钥文件和环境变量文件十六、总结Git 的核心工作流程其实可以压缩成一句话在工作区修改代码用git add放入暂存区用git commit保存到本地仓库再用git push同步到远程仓库。而真正让人熟练掌握 Git 的关键不是死记命令而是理解每条命令所在的场景参与已有项目时用clone本地项目首次上传时用init remote add push日常开发时用branch add commit push多任务切换时用stash同步团队进度时用pull或fetch merge只要把这些场景练熟你就会发现 Git 并不是“很难的工具”而是一个非常可靠的版本管理助手。如果你想继续往下写这篇后面还很适合继续扩展Git 分支管理策略Git Flow、GitHub Flow、Trunk-Based Developmentrebase和merge的区别GitHub Pull Request 协作流程详解如何写规范的 Commit MessageGit 常见报错与排查清单