Git 实战笔记:撤销合并、修改历史版本号与清理未跟踪文件
在日常的固件开发中,我们经常会遇到提交信息写错、误合并代码或者编译残留文件的问题。本文记录了三个高频场景的解决方案。
场景一: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。而且这些更改已经合并到了 develop 或 master。
这需要“外科手术式”的修改,步骤如下:
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):同时删除未被跟踪的文件夹。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 asher
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果