开发指南:Git日常维护与常用命令

一、前言

在企业项目里,会用 git add、git commit 和 git push,通常只能完成"把代码交上去"。真正影响开发效率的,是后面的事情:同事之间同时修改同一个文件导致代码冲突怎么办?需求做到一半,线上出了故障怎么办?有问题的代码已经合进主干,怎样撤回才不会连带影响别人的工作?

Git 能帮助团队隔离修改、审查差异、追踪问题,并在操作失误后找回部分工作。但这些能力需要配合明确的协作规则。分支随意创建、提交混在一起、发布版本没有记录,命令记得再熟也容易出错。本文以一个订单服务为例,给出一套可以在团队中执行的工作流程。

二、接手项目:确认身份、仓库和分支

1、先了解分支情况

| 分支或标签 | 示例 | 用途与约束 |
| 主干分支 | master | 保护分支,通过评审合入,发布时打标签 |
| 发布维护分支 | release/v1.0.0 | 停止增加新需求,只修本次发布的问题 |
| 开发分支 | dev_1.0.0 | 日常开发、测试中发现的问题 |

发布标签 v1.0.0 标记确定的发布提交;发布后不随意移动

2、下载项目并配置提交身份

git clone git@git.example.com:backend/order-service.git

cd order-service

只配置当前仓库,避免公司项目和个人项目混用身份

git config user.name "张三"

git config user.email "zhangsan@example.com"

查看当前仓库生效的身份

git config user.name

git config user.email

如果所有仓库都使用同一个身份,可以在配置时加 --global。提交身份用于记录作者,不等于远端登录身份;SSH 密钥或访问令牌需要按公司要求单独配置。如果已有本地项目、尚未纳入 Git 时,才使用 git init。从远端 clone 下来的仓库已经初始化,不需要重复执行。

3、确认当前操作对象

git remote -v # 查看远端地址

git status # 查看分支、文件变化和进行中的操作

git branch --show-current

git branch -a # 查看本地分支和远端跟踪分支

git branch -vv # 查看本地分支的上游关系

如果公司迁移了仓库地址,可以修改远端配置:

git remote set-url origin git@git.example.com:new-team/order-service.git

git remote -v

三、Git提交过程

1、查看修改内容,文件变化情况

git status

2、获取远端变化(从远程仓库 origin 下载最新的提交、分支和标签信息到本地,但不会自动合并或修改你当前的工作区。可以理解为"看看远程有什么新东西")

git fetch origin

3、更新已有本地开发分支

git switch dev_1.0.0 #切换分支

git pull --ff-only origin dev_1.0.0 #从远端origin拉取代码

(1)以前一般是通过checkout切换分支,Git 2.23版本开始可以通过switch切换分支

(2)pull 会先获取远端变化,再按参数将指定分支整合到当前分支

(3)--ff-only 只允许快进更新。本地和远端各自新增提交、历史已经分叉时,它会停止,不会自动制造一次合并。此时先检查提交,再按团队规则选择 merge 或 rebase。

4、修改内容的前后对比

git diff

5、提交并推送(特别注意:push之前建议先pull,可以减少代码冲突)

git commit -m "feat(order): 增加订单导出日期范围校验"

git push -u origin dev_1.0.0

6、git提交历史

git log

git show

四、常见问题处理

1、 解决 merge 冲突?

git status

git diff --name-only --diff-filter=U

打开冲突文件,根据双方改动情况进行处理(一定要仔细检查,不要把其他同事提交的内容给覆盖了)。比如一方增加权限校验,另一方增加参数检查,最终通常要保留两种检查,并确定合理顺序。直接选择"全部接受当前"可能丢掉另一方的工作。修改后删除冲突标记,暂存文件并继续:

git add src/main/java/com/example/order/OrderExportService.java

git diff --cached --check

git merge --continue

操作前保持工作区干净,能减少中止合并时恢复现场的困难。合并完成后重新检查最终差异并运行相关测试; (当然我们日常一般可以借助TortoiseGit、IDEA、SourceTree等工具来更方便进行代码冲突检查处理**)**

2、选怎merge,还是rebase?

git merge git rebase
历史形态 产生一个合并提交,有分叉 一条直线,干净
提交哈希 原提交不变 会生成新提交(哈希变了)
是否保留真实时间线 保留 被改写
冲突处理 一次性解决 可能每个提交都要解一次
适用场景 公共分支、已推送的分支 本地私有分支,推送前整理

简而言之,merge 保留历史真相,rebase 追求历史整洁。

3、临时切换任务:用 stash 保存未完成修改

需求还没完成,突然要排查一个问题,不必为了切换分支就丢掉当前代码。

git stash push -u -m "订单导出开发中,临时保存"

git stash list

-u 会包含未跟踪文件,不包含 .gitignore 忽略的文件。完成其他任务、回到原分支后,确认要恢复哪一项:

git switch dev_1.0.0

git stash list

git stash show --stat 'stash@{0}'

git stash apply 'stash@{0}'

git status

  • -stat:只显示统计信息(文件名 + 增删行数),不显示逐行 diff

  • stash@{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.java

(3)最近一次提交只在本地(已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 origin

git switch -c fix/revert-export --no-track origin/dev_1.0.0

git 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日常开发常用命令详解,以及一些日常遇到情况的处理方式。欢迎各位同学交流学习!

相关推荐
鶴哥只手遮天7 小时前
Git 2.56 源码深度剖析:为 Git 3.0 铺路的架构重构
git·开源
小此方10 小时前
「插曲:Git」标签管理篇:理解Tag标签、为指定提交打标签、查看标签详情与附注标签
git
Madison-No711 小时前
多语言聊天大模型--测试报告
linux·git·python·selenium·jmeter·自动化·postman
小此方11 小时前
「插曲:Git」多人协作篇:远程分支创建与关联、多人协作冲突解决、Feature分支开发与合并、git remote prune清理失效分支
git
可乐ea13 小时前
Git 基础设施重建:智能体规模开发下的读写解耦
大数据·git·elasticsearch·分布式存储·git基础设施·智能体规模开发·读写解耦
信可维16 小时前
AI 说「改完了」怎么确认真改完了:git diff + 测试 + 一张验收表的 3 步复核
人工智能·git
Sun子矜17 小时前
Git+Gitee 新手教程精简归纳版
git·gitee
亿道电子Emdoor18 小时前
【Perforce】Klocwork-kwgcheck图形化界面无法打开如何解决
git·python·github
小此方2 天前
「插曲:Git」企业规范篇:DevOps开发模型、Git Flow五类分支设计与测试/预发布/生产环境Bug修复及Hotfix紧急发布流程
git·bug·devops