Git Alias:从错误分支中救回提交
Source: Dev.to

为什么这比以往更重要
在 AI 辅助开发的时代,错误提交到错误分支的情况变得越来越常见。
AI 工作流的现实
使用 AI 编码助手(Claude、Cursor、GitHub Copilot 等)时,你的工作流会发生巨大变化:
- 快速迭代 – 代码生成和测试的速度大幅提升。
- 上下文切换 – 你在多个功能和实验之间来回切换。
- 探索性编码 – 尝试 “如果这样会怎样” 的情景成本低。
- 减少仪式感 – 你在 IDE 脚手架上花的时间更少,写代码的时间更多。
这种速度降低了遵循传统 “创建分支 → 切换 → 提交” 流程的可能性,导致意外提交到 main。
为什么不能随意应付
- 手动修复容易出错 –
git reset、挑拣(cherry‑picking)或变基(rebasing)如果漏掉一步会丢失工作。 - 打断工作流 – 花几分钟查找 git 命令会破坏 AI 编码带来的动能。
- 错误更频繁 – 使用 AI 时,这类错误可能每周甚至每天都会出现。
- 团队摩擦 – 意外提交到
main会影响整个团队。
自动化思维
如果你利用 AI 加速开发,就应该同样自动化错误恢复。下面的 git 别名就是安全网:一条命令、几秒钟,让你重新回到正轨。
问题
你在错误的分支上有若干本地提交(尚未推送),需要:
- 将这些提交移动到一个新分支。
- 将原分支重置为与远程保持一致。
- 保留所有工作。
解决方案
将下面的 git 别名添加到全局配置中,一键救援提交:
git config --global alias.move-commits '!f() { \
CURRENT=$(git branch --show-current); \
NEW_BRANCH=${1:-rescued-commits}; \
git branch $NEW_BRANCH && \
git reset --hard origin/$CURRENT && \
git checkout $NEW_BRANCH; \
}; f'
使用方法
# 将提交移动到名为 "feature-branch" 的分支
git move-commits feature-branch
# 或使用默认名称 "rescued-commits"
git move-commits
工作原理
- 获取当前分支名 – 确定要重置的分支。
- 在当前提交处创建新分支 – 保留所有工作。
- 将原分支重置为远程状态 –
git reset --hard origin/BRANCH。 - 切换到新分支 – 让你立即继续工作。
手动安装
如果你更喜欢直接编辑 ~/.gitconfig,在 [alias] 部分加入以下内容:
[alias]
move-commits = "!f() { CURRENT=$(git branch --show-current); NEW_BRANCH=${1:-rescued-commits}; git branch $NEW_BRANCH && git reset --hard origin/$CURRENT && git checkout $NEW_BRANCH; }; f"
注意事项
- 别名默认假设远程仓库名为
origin。如果你的远程名称不同,请将origin/替换为相应名称。 - 它仅适用于 尚未推送 的提交。已推送的提交需要采用其他方法。
--hard重置会丢弃所有未提交的更改,请确保在运行别名前已提交所有内容。
为什么可行
在 Git 中,分支只是指向提交的指针。创建新分支相当于在当前提交上再加一个指针,随后你可以安全地将原分支指针回退到远程状态,而不会丢失任何工作。
下次误提交到错误分支时,省去头疼的手动操作。添加此别名,用一条命令即可救援你的提交。