【问题标题】:Amending commit that is edited as part of a rebase in magit修改在 magit 中作为 rebase 的一部分编辑的提交
【发布时间】:2014-11-12 13:36:23
【问题描述】:

我正在使用 Emacs + 它在很多方面都非常棒,可以与 git 一起使用。尽管我无法映射到我的工作流程的一个方面,因此也无法映射到这个问题。

有时您有一个提交,应该将其重新设计为单独的提交。我可以使用 magit 以交互方式 rebase 我的提交,并声明我打算编辑所述提交。

现在我必须切换到 git gui,选择“ammend last commit”,它会显示已分阶段的更改,然后取消暂存那些我想成为单独提交的部分。然后我提交,暂存排除,然后再次提交 - 瞧,我的历史中有一个新的提交。

到目前为止,我还没有找到使用 Emacs 完成此任务的方法。有什么提示吗?

【问题讨论】:

  • 这可能在 Emacs.SE 上问得更好。
  • 嘿,你如何交互式地重新提交提交? :)
  • @SeanAllred 哦,我不知道有一个。转到日志(来自 magit-info 缓冲区的“l l”),转到提交,然后按“E”。我会从那里重新调整所有提交。确保使用“C-x #”保存缓冲区,因为它是远程缓冲区。
  • next 分支上,rebase 得到了很大的改进,例如当 rebase 正在进行时,尚未重新应用的提交以及已经重新应用的提交会显示在状态缓冲区中。您的问题(“如何拆分提交”)我已在其他地方详细回答:github.com/magit/magit/issues/966#issuecomment-60498587。 (下面 Jordon 建议是一种方法,但是当使用 next 分支时,有一个更优雅的变体。

标签: git emacs magit


【解决方案1】:

在你开始 rebase 之后,不要去 gui,而是对 HEAD~1 执行 magit-reset-head,这将使你能够取消暂存更改,并在最终继续之前根据需要暂存和提交从 magit 状态缓冲区变基。


示例场景工作流程:

  1. 提交对文件 A 的更改(提交 1)
  2. 提交对文件 B 和文件 C 的更改(提交 2)
  3. 提交对文件 D 的更改(提交 3)
  4. 意识到您希望对文件 B 和文件 C 的更改分别提交
  5. 运行magit-log
  6. 在提交 2 处开始交互式变基 (E)。
  7. 指定您要编辑 (e) 提交 2 并完成 (C-cC-c)
  8. 返回 magit 状态缓冲区。
  9. 运行magit-reset-head (x),在提示符中指定HEAD~1
  10. 您将看到提交 2 的更改已暂存。
  11. 取消暂存对文件 C 的更改。
  12. 提交文件 B 的分阶段更改。
  13. 暂存并提交对文件 C 的更改。
  14. 使用 RC 继续并完成变基

您现在将有四个提交,每个提交按 A、B、C、D 的顺序更改一个文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 2018-09-21
    • 2020-10-16
    • 1970-01-01
    • 2017-09-25
    • 2021-10-02
    相关资源
    最近更新 更多