将多个更改拆分成单独的提交使用git?

62
如果我对一个大文件进行了多组更改,是否可以使用Git将其拆分为单独的提交?

可能是如何使用Git将提交拆分为较小的提交?的重复问题。 - user456814
4
另外,目前还不确定改动是否已经提交。如果改动已经在多个提交中被提交了,那么使用"rebase --interactive"是一个好的选择。如果没有提交,"git add --patch"也是你应该考虑的选项之一。 - user456814
4个回答

101

您想要使用 git add --patch文档)命令,这将允许您选择要暂存的更改。


6
为什么会被踩?如果你只是想选择 hunks,那么 git add -i 就有点过头了,因为你从 -i 菜单中选择的第一个选项是 'p'(或 5),所以最好直接使用 --patch。 - William Pursell
11
真的吗,又被踩了一次,却没有任何解释?如果你认为使用git add --patch存在问题,请礼貌地给出解释。 - William Pursell
3
我认为这些踩(不是我踩的!)来自那些已经提交更改的人,而这个答案对他们无效。问题没有说明更改是否已提交。 - mikemaccana
5
简化版命令是 git add -p,它允许我们选择要添加的代码块。 - Venkat Ch
@mikemaccana 这个问题并没有说这些文件已经提交。我更新了这个答案。 - stephanmg

18

是的,你可以——使用git add -i选择要为每个提交暂存的块。你可以通过运行git help add并滚动到“交互模式”来获取文档。


1

我经常使用的另一个选项只是因为我忘记了patch选项 :):

假设你已经更新了文件:aaa.txtbbb.txtccc.txt,并且你想在第一次提交中 push aaa.txt 文件,然后在第二次提交中 push bbb.txtccc.txt

step 1:
--------------------
git add aaa.txt
git commit -m "Added first file"
git stash
git push

step 2:
--------------------
git stash pop
git add -A
git commit -m "Added the rest of the modified data"
git push

可能会更冗长,但我认为这样可以获得更多的控制。

干杯!


0

Williams answer是完全有效的。但有时候手动操作更容易。例如,如果您意外更新了一些第三方库的很多文件,在提交之前进行了修改。使用git add -p(与--patch相同),你需要浏览所有这些文件。所以在这种情况下,更方便的做法是只提交想要提交的文件,并在所有其他更改后进行第二次提交:

> git add /path/to/your/file.txt
> git commit -m "my commit message"
[master a0c5ea6] my commit message
1 file changed, 2 insertions(+), 1 deletion(-)
> git add --all
> git commit -m "updated library xyz"

7
实际上,git add -p 允许您在命令行中选择特定的文件,在交互会话中,您可以使用 g 跳转到特定的代码块,或者使用 / 搜索与正则表达式匹配的代码块。add -p 的目的是从文件中选择代码块,但这个提议的解决方案需要添加整个文件,这不符合原帖作者的要求。 - William Pursell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接