开发指南:Git日常维护与常用命令 一、前言在企业项目里会用git add、git commit和git push通常只能完成“把代码交上去”。真正影响开发效率的是后面的事情同事之间同时修改同一个文件导致代码冲突怎么办需求做到一半线上出了故障怎么办有问题的代码已经合进主干怎样撤回才不会连带影响别人的工作Git 能帮助团队隔离修改、审查差异、追踪问题并在操作失误后找回部分工作。但这些能力需要配合明确的协作规则。分支随意创建、提交混在一起、发布版本没有记录命令记得再熟也容易出错。本文以一个订单服务为例给出一套可以在团队中执行的工作流程。二、接手项目确认身份、仓库和分支1、先了解分支情况分支或标签示例用途与约束主干分支master保护分支通过评审合入发布时打标签发布维护分支release/v1.0.0停止增加新需求只修本次发布的问题开发分支dev_1.0.0日常开发、测试中发现的问题发布标签v1.0.0标记确定的发布提交发布后不随意移动2、下载项目并配置提交身份git clone gitgit.example.com:backend/order-service.gitcd order-service# 只配置当前仓库避免公司项目和个人项目混用身份git config user.name 张三git config user.email zhangsanexample.com# 查看当前仓库生效的身份git config user.namegit config user.email如果所有仓库都使用同一个身份可以在配置时加--global。提交身份用于记录作者不等于远端登录身份SSH 密钥或访问令牌需要按公司要求单独配置。如果已有本地项目、尚未纳入 Git 时才使用git init。从远端clone下来的仓库已经初始化不需要重复执行。3、确认当前操作对象git remote -v # 查看远端地址git status # 查看分支、文件变化和进行中的操作git branch --show-currentgit branch -a # 查看本地分支和远端跟踪分支git branch -vv # 查看本地分支的上游关系如果公司迁移了仓库地址可以修改远端配置git remote set-url origin gitgit.example.com:new-team/order-service.gitgit remote -v三、Git提交过程1、查看修改内容文件变化情况git status2、获取远端变化从远程仓库origin下载最新的提交、分支和标签信息到本地但不会自动合并或修改你当前的工作区。可以理解为“看看远程有什么新东西”git fetch origin3、更新已有本地开发分支git switch dev_1.0.0 #切换分支git pull --ff-only origin dev_1.0.0 #从远端origin拉取代码1以前一般是通过checkout切换分支Git 2.23版本开始可以通过switch切换分支2pull会先获取远端变化再按参数将指定分支整合到当前分支3--ff-only只允许快进更新。本地和远端各自新增提交、历史已经分叉时它会停止不会自动制造一次合并。此时先检查提交再按团队规则选择 merge 或 rebase。4、修改内容的前后对比git diff5、提交并推送特别注意push之前建议先pull可以减少代码冲突git commit -m feat(order): 增加订单导出日期范围校验git push -u origin dev_1.0.06、git提交历史git loggit show四、常见问题处理1、 解决 merge 冲突git statusgit diff --name-only --diff-filterU打开冲突文件根据双方改动情况进行处理一定要仔细检查不要把其他同事提交的内容给覆盖了。比如一方增加权限校验另一方增加参数检查最终通常要保留两种检查并确定合理顺序。直接选择“全部接受当前”可能丢掉另一方的工作。修改后删除冲突标记暂存文件并继续git add src/main/java/com/example/order/OrderExportService.javagit diff --cached --checkgit merge --continue操作前保持工作区干净能减少中止合并时恢复现场的困难。合并完成后重新检查最终差异并运行相关测试当然我们日常一般可以借助TortoiseGit、IDEA、SourceTree等工具来更方便进行代码冲突检查处理2、选怎merge还是rebasegit mergegit rebase历史形态产生一个合并提交有分叉一条直线干净提交哈希原提交不变会生成新提交哈希变了是否保留真实时间线保留被改写冲突处理一次性解决可能每个提交都要解一次适用场景公共分支、已推送的分支本地私有分支推送前整理简而言之merge 保留历史真相rebase 追求历史整洁。3、临时切换任务用 stash 保存未完成修改需求还没完成突然要排查一个问题不必为了切换分支就丢掉当前代码。git stash push -u -m 订单导出开发中临时保存git stash list-u会包含未跟踪文件不包含.gitignore忽略的文件。完成其他任务、回到原分支后确认要恢复哪一项git switch dev_1.0.0git stash listgit stash show --stat stash{0}git stash apply stash{0}git status-stat只显示统计信息文件名 增删行数不显示逐行 diffstash{0}最近一次 stash最新确认内容完整、冲突已解决后再单独删除对应记录git stash drop stash{0}4、撤销和恢复先判断修改到了哪一步1已暂存新增的文件或者做了修改的文件但不想提交这个文件git restore --staged src/main/java/com/example/order/OrderExportService.java取消暂存也就是不再commit了工作区修改仍保留改动的内容依然在。特别注意Git 2.23 引入--staged表示操作对象是暂存区。2确定丢弃某个文件的未暂存修改不增加staged选项git restore -- src/main/java/com/example/order/OrderExportService.java3最近一次提交只在本地已commit未push想要撤回git reset --soft HEAD~1它把分支回退一个提交保留暂存区和工作区内容。常见 reset 模式的区别如下命令提交位置暂存区工作区git reset --soft HEAD~1回退一个提交保留保留git reset --mixed HEAD~1回退一个提交重置到目标提交保留git reset --hard HEAD~1回退一个提交重置到目标提交覆盖受影响内容4错误提交已经合入共享分支已commit已push通过新分支创建反向提交再评审合入git fetch origingit switch -c fix/revert-export --no-track origin/dev_1.0.0git show commit-id # 核实是否为已提交的内容git revert commit-id # 不改历史生成反向提交git push -u origin fix/revert-export# → 提 PR等 review 和 CI再合并五、常用命令速查看当前状态git status看未暂存差异git diff看准备提交的差异git diff --cached获取远端变化git fetch origin快进更新当前分支的上游内容git pull --ff-only创建并切换分支git switch -c feature/任务名切换已有分支git switch 分支名暂存指定文件git add 文件路径按块选择修改git add -p提交修改git commit -m 说明首次推送并设置上游git push -u origin 分支名合并指定分支到当前分支git merge origin/目标分支临时保存现场git stash push -u -m 说明取消暂存保留修改git restore --staged 文件路径撤销已共享的普通提交git revert 提交SHA查看近期提交git log --oneline -10查看某次提交git show 提交SHA六、小结以上是Git日常开发常用命令详解以及一些日常遇到情况的处理方式。欢迎各位同学交流学习