git - 如何以这种特定方式拆分 git commit

标签 git

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

现在我想做以下事情:

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

现在我可以“手动”完成此操作,方法是获取包含日志记录的代码的简单副本,然后如上所述删除日志记录并将这些提交压缩为一个(因此提交历史记录中根本没有日志记录代码) ),然后恢复包含日志记录的代码副本,并将其添加为新的提交。

但是有没有一种方法可以使用 git 功能优雅地完成此操作,并且减少人为错误的可能性?

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

最佳答案

我认为没有任何方法可以在没有任何人为错误的情况下做到这一点,但是通过使用一些 git-features 并基本上撤消您的提交,然后仅在每次提交中添加您想要的部分,您可以实现什么你描述一下。

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

这是我的解决方法:

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

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

关于git - 如何以这种特定方式拆分 git commit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57179501/

相关文章:

git - 如何将更改 merge 到单个文件,而不是 merge 提交?

git - 使用 VSTS API 在 VSTS 中的持续集成/持续交付过程中将文件提交到 Git

git - 是否有可能从 git 提交历史或信息中获取有关哪个 ip 或计算机的信息

Github - 比较分支时没有文件更改但有很多提交

git - 添加环境变量以提交消息

git - 源树 : Adding a custom action to open a file in an external editor

Git - 重新设置一组分支

用于 Web 开发的 Git 工作流

git - 如何从自动完成中删除已删除的分支名称?

git 说未跟踪的内容,无法将其添加到 repo