Cursor 101

Git:AI 异常写入后的必备姿势

详细介绍在使用 Trae AI 过程中,如何通过 Git 操作处理 AI 生成的异常代码,保障代码质量和项目稳定性。

前文我们介绍了很多 Trae 提供的各式 AI 功能,可以帮助大家提高编码的效率。但不得不接受的一个事实是,AI 目前还没到可以作为绝对正确成品的程度,有时候会带入一些隐性的 bug,或者生成效果与预期不符。

Tutorial image

针对这种情况,Trae 其实提供了回滚的功能帮助大家回退到之前的版本,前提是大家能找到对应的对话,并进行回滚。对于会话过多无法定位,或者已经通过 git 提交的场景,这个功能就很难再完成回退了。

因此了解基本的一些 GIT 回退操作也是非常必要的,虽然这个话题已经是老生常谈了,但是考虑到一些新手同学并不是很熟悉这些操作,为避免 AI 功能对大家的编码造成困扰,所以希望同学们还是允许我赘述一下这些场景下 GIT 操作的姿势。

如果已经是非常熟悉 GIT 的同学,可以跳到下一章实战篇开始学习,节省时间,姿势不完整的地方大家也可以在评论区讨论指正~

风险代码提交了 Commit ,但未推至远程

假设 AI 生成代码后,我们提交了 Commit,但未推至远程,也就是扔在本地

git commit -m "xxxx"

这种我们可以使用软回滚的方式完成回滚,先使用 git log 查询需要回滚至的仓库版本,然后使用 git reset --soft 软回滚撤销本地的 commit 即可。

git log 
git reset --soft xxx

值得一提的是,reset 提供了 soft 和 hard 两种参数用于设置回滚的形式,它们分别是软回滚和硬回滚:

  • 软回滚:撤销 commit,但是保留工作区修改,也就是可以再次修改后提交
  • 硬回滚:本地将丢弃所有的变更,工作区变得与指定 commit 一致

所以在这种场景下,通常使用软回滚是更合适的,因为 commit 的代码仍然需要保留在工作区。

风险代码已经推送至远程分支,但未合入

假设风险代码已经推送至远程开发分支

git commit -m "xxxx"
git push

这种很好解决,我们只需要直接修复,并覆盖 commit

git commit --amend
git push --force-with-lease

如果暂时不确定修复方案,可以先使用软回滚调整工作区内容到本地,并强推

git log 
git reset --soft xxx
git push --force-with-lease

需要注意的是,这里的强推需要避免使用 git push -f,在多人合作场景下,push -f可能会覆盖其他人的代码,而 push --force-with-lease 是一种更安全的强推做法,如果强推阶段的本地 git tree 落后于远端 git tree,push --force-with-lease会禁止强推,并引导你完成本地内容的同步后再进行后续操作。

存在风险代码的远程分支合入了主分支

如果存在风险的代码分支已经合入了主分支,这种需要第一时间进行回滚止损。与非主分支的回滚不同,主分支应该禁用直接的强推操作,我们需要使用 revert 完成分支的回滚。

git log
git revert xxx

reset 回滚不同的是,revert 会创建一个新的 commit 用来撤销之前变更的内容,常用于主分支的回滚场景。

Trae 下载地址:https://www.trae.ai