如何在git中提交特定的更改

时间:2018-06-12 11:36:10

标签: git command git-commands

我重命名了一个接口(IMoo到IKey)和一个类文件(Moo到Key)。之后我在类文件中创建了一个方法(blob())并在接口中创建了实现。如何在git中单独提交这两个更改?

这样第一次提交只包含重命名的更改,第二次提交包含接口中的方法和实现。

1 个答案:

答案 0 :(得分:0)

在制作更改时,单独提交更改要比将它们全部组合在一起后尝试将它们分开要容易得多。

这意味着重新进行第一次更改,提交,然后重新应用完整更改可能更容易,而不是搞乱交互式分段等事情。

重做方法

例如,您可以保存并预留当前的更改

git stash

然后重做重命名操作,这应该是直截了当的。然后像

git add .
git commit -m "rename class and interface"

接下来,请完整修改完毕。为了避免可能的冲突,我会做类似

的事情
git checkout HEAD^
git stash pop
git reset --mixed HEAD@{1}

现在您应该在历史记录中看到重命名,并且工作树中的其余更改已准备好上演和提交。

无重做方法

以上确实假设您可以轻松地重做类重命名,因为它是一个小的更改(小代码库,或者至少不是代码库中引用受影响的类和接口的大量引用),或者因为您的IDE将会为你做(如果没有,你可能想要考虑使用更好的开发工具)。但是,如果你有一个更复杂的变化呢?

理想情况下,您可以说git add -i启动交互式分段会话,并通过提示指定类名称更改,但新方法已经用完。他们应该是独立的变革帅哥,所以好吧......

但问题是,根据您的编程语言和代码布局,您可能在重命名该类时重命名了该文件。交互式临时工具不擅长处理它。

因此,在这种情况下,您可以返回上一次提交,只需重命名文件并提交,然后在新提交之上恢复更改,然后执行交互式分段操作。但是当你完成所有这些工作时,你已经完成了我原来建议的几乎所有步骤,加上交互式rebase,你在历史上仍然会有额外/破坏/可能不需要的提交(你会可能想要挤压... ...那有什么意义呢?

好吧,如果由于某种原因您希望以这种方式进行尝试,请参阅与git add-i选项相关的-p文档。 https://git-scm.com/docs/git-add