git:仅修补文件旧版本的部分内容

时间:2011-07-28 13:38:52

标签: git patch

我将“main.c”的副本提交到我的存储库。然后我删除了5个完整的函数,看看会发生什么。我想要其中2个功能。我可以这样做:

$ git make-patch main.c --interactive > patch_to_add_back_functions.patch
#interactively choose the functions I want.
$ patch main.c patch_to_add_back_funcitons.patch

有没有办法实现这一目标?无论是通过补丁生成还是通过任何最可能的思维方式。

1 个答案:

答案 0 :(得分:2)

如果您使用git checkout -p,您可以选择性地放弃工作树中的更改 - 这对于您描述的情况非常有用,我发现了。其他一些注意事项可能会引起关注:

  • 作为澄清,当我说“有选择地放弃更改”时,严格来说应该“有选择地将文件的某些部分更改回索引中的状态”。但是,如果自上次提交后没有进行任何更改,则索引中的状态将与上次提交中的状态相同。

  • 与git中的其他交互式-p选项一样,您可以按 s 进一步拆分补丁,或者,如果您需要以更精细的方式放弃更改级别,按 e 将允许您直接编辑补丁。 (然而,后者在开始时可能会相当混乱。)