首页 > 解决方案 > 如何以这种特定方式拆分 git commit

问题描述

情况:我有一个git commit(在 HEAD),它混合了额外的日志记录代码,然后是一些“真实代码”。

现在我想做以下事情:

  1. 编辑掉所有的日志代码,基本上清理了代码库
  2. 提交这个
    • 我现在在最后两次提交中有所需的状态,但是它们的顺序错误,首先添加所有内容,然后删除日志记录,当我想要添加其他代码然后添加日志记录时
  3. 交换这两个提交,这样
    • 首先,在没有记录的情况下添加了实际功能
    • 然后将日志记录代码添加到自己的提交中

现在我可以“手动”执行此操作,通过获取包含日志记录的代码的纯副本,然后按照上述删除日志记录并将这些提交压缩为一个(因此提交历史记录中根本没有日志记录代码),然后恢复包含日志记录的代码副本,并将其添加为新提交。

但是有没有一种方法可以优雅地做到这一点,并且使用git功能减少人为错误的可能性?

澄清一下,我不想选择在我想要的第一次提交中包含哪些部分(因为那里有很多小的更改,我不想再次查看它们)。我想选择从第一次提交中删除哪些部分,并添加为新的第二次提交。

标签: git

解决方案


我认为没有任何方法可以做到没有任何人为错误的可能性,但是通过使用一些 git 功能并基本上撤消你的提交,然后只在每次提交中添加你想要的部分,你可以实现你所描述的。

我会通过软重置来做到这一点HEAD~1,然后使用git add --patch仅添加您想要在第一次提交中提交的部分,提交,然后添加日志记录。

以下是我将如何处理这个问题:

  1. git reset --mixed HEAD~1这会重置您的最后一条提交消息并取消暂存这些更改。
  2. git add --patch这为您提供了一种交互模式,您可以在其中选择要暂存的未暂存更改的哪些部分。如果代码块太大(即您只想提交它的一部分),您可以通过点击将其拆分为较小的部分s,然后只暂存较小的部分。它支持将代码块拆分为单行更改,因此希望这对您来说已经足够了。
  3. git commit提交你的“真实代码”
  4. git add .暂存其余更改(日志记录代码)
  5. git commit再次提交日志记录代码

通过使用这种方法,您不必在任何地方复制粘贴任何代码,从而至少减少了人为错误的机会。


推荐阅读