git - 如何将带有交互式 rebase 的提交编辑为未提交?

标签 git

我想使用交互式 rebase 来编辑以前的提交,但是当我进入该提交的编辑模式时,所有文件都已提交。

我知道我可以进行更改和修改提交,但我希望所有更改最初都未提交(暂存或其他方式),这样我就可以编辑它,就好像它是最初提交之前的片刻一样。这可能吗?

最佳答案

想象 git rebase --interactive 给你这个列表:

pick 3d15626 first
pick 7911b8b second
pick 60d94b4 third

现在您想要编辑处于未提交状态的第二个提交。为此,像这样更改它的行:

pick 3d15626 first
exec git cherry-pick --no-commit 7911b8b && false
pick 60d94b4 third

这一行的作用:

  • 不是通常选择提交 git cherry-pick 而是执行
  • git cherry-pick 会将“第二个”提交(注意使用相同的提交哈希)应用于索引和工作树,预加载提交消息但不提交(--不提交)
  • && false 通过返回失败的退出代码确保执行的命令“失败”。这会强制 git rebase 在此行之后中断,让您“修复”问题,即您现在可以编辑提交
  • 完成编辑后,您可以再次git commit。由于 git cherry-pick
  • ,编辑器将自动包含原始提交消息
  • 提交提交并且索引再次干净后,您可以继续 git rebase --continue

关于git - 如何将带有交互式 rebase 的提交编辑为未提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44513186/

相关文章:

Gitolite git克隆错误

Visual Studio 2019 中的 Git 作者信息

linux - 如何获取 Git/GitHub 存储库的 JSON 表示

c++ - 完全替换功能时是否有可能获得清晰的 git diff?

linux - 有没有一种方法可以每天自动备份文件并每天突出显示差异

git - 如何从 GITLAB 仪表板中新创建的 git 分支中删除特定文件和文件夹?

Git Rebase 冲突 : Who is HEAD?

git - 使用最新版本覆盖 git 中的特定冲突文件

git - 同时提交到多个分支

Git 分支和环境部署跟踪