有人要求我将一个本地提交中的一个文件中的几个不相关更改分成两个单独的提交(例如,我修复了一个错误,但还进行了一些拼写检查,这不应该属于修复)。基本上,我需要从现有提交中“樱桃挑选”一些更改到新提交中。 git可以以任何方式帮助我吗?最好的方法是什么?
答案 0 :(得分:4)
有几种方法可以解决此问题。最简单的情况是,您要拆分的提交是 latest 提交。因此,当您运行git show
时,它会显示那个提交。
在这种情况下,最简单的方法是重置提交并再次提交更改:
# Remove the commit, but keep all changes
git reset --soft HEAD~1
这将使您拥有索引中该提交所做的所有更改。从那里,您可以修改索引以仅包含您要首先提交的那些更改。您可以使用git reset -p
或git add -p
进行基于修补程序的交互式添加或删除暂存的更改。您还可以调用git gui
来启动Git附带的GUI,以使此操作更加容易。当然,您可以使用任何您喜欢的其他工具。
在为第一次提交选择了正确的更改之后(可以使用git diff --cached
查看所做的更改),只需提交它们,然后进行下一次提交即可。您可以对所需的多次提交重复该过程,直到最终所有未完成的更改都提交为止。
如果您要拆分的提交不是最新的提交,则过程会稍微复杂一些。您可以使用交互式变基来基本上 edit 您要拆分的提交。然后,交互式重新基准化将使您处于该提交为“最新”的临时状态。此时,您可以按照上面的步骤进行操作,并在完成后继续重新设置基准。
答案 1 :(得分:1)
提交文件的一部分是我使用GUI工具的罕见情况之一。当我这样做时,我通常使用git-cola:https://git-cola.github.io/
这样,您可以轻松地选择要添加到提交中的文件的哪一部分。