情况:我有一个git提交(在HEAD),其中混合了额外的日志代码,然后是一些“真实代码”。
现在我想做以下事情:
- 编辑掉所有日志代码,基本上清理了代码库
- 提交此操作
- 我现在在最后两次提交中获得了所需的状态,但它们的顺序错误,首先添加所有内容,然后删除日志记录,而当我想要添加其他代码然后添加日志记录时
- 交换这两个提交,这样
- 首先添加实际功能,没有日志记录
- 然后日志代码会添加到自己的提交中
现在我可以“手动”完成此操作,方法是获取包含日志记录的代码的简单副本,然后如上所述删除日志记录并将这些提交压缩为一个(因此提交历史记录中根本没有日志记录代码) ),然后恢复包含日志记录的代码副本,并将其添加为新的提交。
但是有没有一种方法可以使用 git 功能优雅地完成此操作,并且减少人为错误的可能性?
为了澄清,我不想选择在我想要的第一次提交中包含哪些部分(因为那里有很多小的变化,我不想再次审查它们)。我想从第一次提交中选择要删除的部分,然后添加为新的第二次提交。
最佳答案
我认为没有任何方法可以在没有任何人为错误的情况下做到这一点,但是通过使用一些 git-features 并基本上撤消您的提交,然后仅在每次提交中添加您想要的部分,您可以实现什么你描述一下。
我会通过软重置到 HEAD~1
来做到这一点,然后使用 git add --patch
仅添加您想要在第一个提交的部分提交,提交,然后添加日志记录。
这是我的解决方法:
git reset --mixed HEAD~1
这会重置您的最后提交消息并取消暂存这些更改。git add --patch
这为您提供了一种交互模式,您可以在其中选择要暂存的未暂存更改的部分。如果代码块太大(即您只想提交其中的一部分),您可以通过点击s
将其拆分为较小的部分,然后仅暂存较小的部分。它支持将代码块拆分为单行更改,所以希望这对您来说足够好。git commit
提交你的“真实代码”git add .
暂存其余更改(日志记录代码)
再次 git commit
提交日志代码
通过使用这种方法,您不必在任何地方复制粘贴任何代码,从而至少减少人为错误的可能性。
关于git - 如何以这种特定方式拆分 git commit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57179501/