
Aider 的 /undo、/diff 和 /commit 命令如何管理 AI 产生的修改【免费下载链接】aideraider is AI pair programming in your terminal项目地址: https://gitcode.com/GitHub_Trending/ai/aider当你让 aider 修改代码后需要确认它改了什么、把未提交的内容纳入版本控制以及在改动不合适时快速回退。aider 与 git 深度集成每次 AI 编辑都会自动产生提交并提供了/diff、/commit、/undo三个聊天内命令in-chat commands来完成这些操作。适用前提aider 在一个 git 仓库目录下运行如果目录没有 git 仓库aider 会提示创建一个并且已经通过/add把待编辑文件加入会话。前提了解 aider 自动生成提交的行为在使用三个命令之前先明确 aider 默认如何处理 git 历史见 Git integration 文档每次 aider 编辑文件都会以描述性提交信息创建一个 commit这是/undo和回溯审查的基础如果文件已有未提交改动dirty filesaider 会先以描述性 commit 把这些原有改动提交掉使你的手动编辑与 aider 的编辑分开避免 aider 的不当修改导致丢失你的工作aider 创建的提交会在 git 作者/提交者名称上追加(aider)标记便于在历史中识别。用 /diff 查看上一条消息以来的修改在 aider 完成一次编辑后输入/diff/diff会显示自你上一条消息以来所有文件的改动用于在回退前确认 AI 到底改了什么。输出判断来自 commands.py 中的raw_cmd_diff有改动时输出以Diff since {sha7}...开头后跟具体 diff 内容如果上一条消息以来没有变化aider 提示No changes to display since the last message.此时无需回退。注意它对比的基准是“自上一条消息以来”而不是“自仓库创建以来”所以连续多轮编辑时每轮结束后各查一次/diff是最清晰的核对方式。用 /commit 提交工作区中其余的改动aider 默认已经自动提交它自己的编辑/commit主要用于把 aider 自动提交未覆盖、或在聊天之外产生的脏改动提交进仓库。命令格式见 In-chat commands 文档/commit [可选的提交信息]不带参数时aider 把所有脏改动连同生成的提交信息一起提交提交信息由 weak model 根据 diff 和聊天历史生成见 repo.py 的get_commit_message带参数时参数内容作为提交信息直接使用如果没有脏文件aider 提示No more changes to commit.并结束不会创建空提交来自 commands.py 的raw_cmd_commit。用 /undo 回退最后一次 AI 提交对不满意的 aider 修改输入/undo/undo会撤销 aider 在本次会话中做的最后一次提交并恢复该提交涉及的文件到上一个提交的状态。成功时 aider 输出两行文档示例格式Removed: {sha} {commit message} Now at: {sha} {commit message}第一行是被移除的提交第二行是当前 HEAD 所在的提交。可以用/diff再次确认工作区状态。/undo有严格的适用条件任一不满足都会失败并给出对应提示实现见 commands.py 的raw_cmd_undo条件不满足时的提示当前目录是 git 仓库No git repository found.不是仓库的第一个提交This is the first commit in the repository. Cannot undo.最后一次提交由 aider 在本次聊天会话中做出The last commit was not made by aider in this chat session.aider 会提示可尝试/git reset --hard HEAD^并明确说明这是破坏性命令最后一次提交只有 1 个父提交merge 提交不能撤销The last commit ... has more than 1 parent, cant undo.被改动文件没有新的未提交改动The file ... has uncommitted changes. Please stash them before undoing.需要先 stash被改动文件在上一个提交中已存在删除新文件的情况无法安全回退The file ... was not in the repository in the previous commit. Cannot undo safely.该提交尚未推送到 origin 同名分支The last commit has already been pushed to the origin. Undoing is not possible.也就是说/undo只作用于 aider 本次会话内、未推送、非 merge 的最后一次提交。更早的改动需要借助/git命令执行原生 git 操作或使用你习惯的 git 工具在 aider 之外管理历史。控制这些行为的相关选项以下选项来自 Git integration 文档在需要调整自动提交行为时使用--no-auto-commits停止 aider 为每次编辑自动创建 commit--no-dirty-commits停止 aider 在应用编辑前先把脏文件提交掉--no-git完全停止使用 git。官方不推荐此方式启用前应自行做好文件备份--git-commit-verify提交时运行 pre-commit 钩子。默认 aider 使用--no-verify跳过钩子--git-commit-verifyFalse--commit-prompt自定义生成提交信息所用的 commit prompt可通过命令行、配置文件或环境变量设置。默认 aider 生成遵循 Conventional Commits 的提交信息提交署名相关--no-attribute-author和--no-attribute-committer可禁用对 git 作者/提交者名称追加(aider)--attribute-co-authored-by改为在提交信息末尾追加 Co-authored-by trailer。边界与下一步以上命令都依赖 git 仓库存在且可写在/undo失败时优先按上面的提示逐项核对条件不要直接执行/git reset --hard HEAD^——它可能丢弃非 aider 产生的改动。aider 在聊天外也可以由你偏好的 git 工具管理历史两个途径操作的是同一份 git 数据修改后回到 aider 用/diff核对即可。更多聊天内命令如/git、/run的完整列表见 In-chat commands 文档。【免费下载链接】aideraider is AI pair programming in your terminal项目地址: https://gitcode.com/GitHub_Trending/ai/aider创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考