在日常的固件开发中,我们经常会遇到提交信息写错、误合并代码或者编译残留文件的问题。本文记录了三个高频场景的解决方案。

场景一:Master 分支如何撤销错误的 Merge

问题描述:代码已经 Merge 进了 master 分支并推送到了远程,现在发现有问题需要回退。

方法 A:标准做法(推荐,保留历史)

使用 git revert 是最安全的方式,它会创建一个新的提交来“反向”抵消之前的更改,不会破坏协作同事的历史记录。

由于是撤销 Merge Commit,需要指定保留哪条主线(Mainline):

```bash
# 1. 确保在 master 分支
git checkout master
git pull

# 2. 执行回滚 (CommitID 为想要撤销的那个合并提交的 ID)
# -m 1 表示保留当前分支(master)的历史,剔除被合并进来的分支修改
git revert -m 1 21fa2d5f

# 3. 推送到远程
git push origin master

方法 B:彻底回退(慎用,修改历史)

如果是个人项目,且确定没人拉取过最新代码,可以强制重置指针,让那次合并“彻底消失”。

Bash

# 1. 回退到合并前的上一个版本 (CommitID 为合并前的 ID)
git reset --hard 59a31748

# 2. 强制推送 (Force Push)
git push -f origin master

⚠️ 警告git push -f 会覆盖远程仓库的历史记录。如果在多人协作项目中执行此操作,可能会导致队友的代码冲突,请务必提前沟通。


场景二:修改已合并的历史版本号 (1.0.0 -> 1.0.3)

问题描述:提交记录中写的是 V1.0.0,分支名也是 release/V1.0.0,但实际应该是 V1.0.3。而且这些更改已经合并到了 developmaster

这需要“外科手术式”的修改,步骤如下:

1. 修正源头分支

首先回到那个 release 分支,修改提交信息和分支名。

Bash

# 切换到旧分支
git checkout release/V1.0.0

# 修改最近一次提交信息 (Amend)
git commit --amend -m "V1.0.3"

# 修改分支名称
git branch -m release/V1.0.3

2. 重新进行合并

需要把 develop(或目标分支)重置到合并前的状态,然后重新合并这个改名后的新分支。

Bash

# 切换到开发分支
git checkout develop

# 重置到合并之前的状态 (找到 Initial commit 的 ID)
git reset --hard 63ec3cb

# 重新合并 (使用 --no-ff 生成合并节点)
git merge --no-ff release/V1.0.3
# 注意:此时弹出的编辑器中,检查合并信息是否正确

3. 同步到远程

因为修改了历史,所有涉及的分支都需要强制推送。

Bash

# 强推 develop 分支
git push -f origin develop

# 推送新的 release 分支并删除旧的
git push -f origin release/V1.0.3
git push origin --delete release/V1.0.0

场景三:清理 Untracked Files (未跟踪文件)

问题描述:执行 git status 时,发现有红色的文件夹(如 BCU_BOOT/),通常是编译生成的固件输出目录。我不想要它,也不想提交它。

(注:此处可替换为你的 git status 截图)

解决方案

既然文件还没被 Git 跟踪(Untracked),不能用 git reset,而是直接清理。

在终端执行:

Bash

git clean -fd
  • -f (force):强制执行。

  • -d (directory):同时删除未被跟踪的文件夹。