我可以将一个文件中的更改分成两个提交吗?

Fel*_*bek 1 git

我被要求将一个本地提交中的一个文件中的几个不相关的更改拆分为两个单独的提交(例如,我修复了一个错误,但也进行了一些拼写检查,这不应该是此修复程序的一部分) 。基本上,我需要从现有提交中“樱桃挑选”一些更改到新提交中。git可以以任何方式帮助我吗?最好的方法是什么?

pok*_*oke 5

有几种方法可以解决此问题。最简单的情况是,如果您要拆分的提交是最新的提交。因此,当您运行时git show,它将显示提交。

在这种情况下,最简单的方法是重置提交并再次提交更改:

# Remove the commit, but keep all changes
git reset --soft HEAD~1
Run Code Online (Sandbox Code Playgroud)

这将使您保留索引中该提交的所有更改。从那里,您可以修改索引以仅包含您要首先提交的那些更改。您可以使用git reset -pgit add -p进行基于交互式补丁的交互式添加或删除分段更改。您还可以调用git gui以启动Git附带的GUI,以更轻松地完成此操作。当然,您可以使用任何其他喜欢的工具。

为第一个提交选择正确的更改后(可以使用进行检查git diff --cached),只需提交它们,然后进行下一个提交即可。您可以根据需要进行多次提交,重复此过程,直到最终所有未决的更改都提交为止。


如果要拆分的提交不是最新的提交,则过程会稍微复杂一些。您可以使用交互式变基来基本上编辑要拆分的提交。然后,交互式重新基准化将使您处于该提交为“最新”的临时状态。此时,您可以按照上面的步骤进行操作,并在完成后继续重新设置基准。