【发布时间】:2011-06-24 07:48:47
【问题描述】:
如果我对一个大文件进行了多组更改,是否可以使用 git 将它们拆分为单独的提交?
【问题讨论】:
-
此外,尚不清楚更改是否已提交。如果他们已经在多个提交中提交,
rebase --interactive是要走的路。如果没有,git add --patch是您应该考虑的选项之一。
标签: git
如果我对一个大文件进行了多组更改,是否可以使用 git 将它们拆分为单独的提交?
【问题讨论】:
rebase --interactive 是要走的路。如果没有,git add --patch 是您应该考虑的选项之一。
标签: git
您需要git add --patch (documentation),这将允许您选择对阶段进行哪些更改。
【讨论】:
git add --patch 有问题,请提供解释原因。
git add -p,它允许我们选择要上演的大块
是的,您可以 -- 使用 git add -i 来选择要为每次提交暂存的数据块。您可以通过运行git help add 并滚动到“交互模式”来获取文档。
【讨论】:
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"
【讨论】:
git add -p 允许您在命令行中选择特定文件,并且在交互式会话中您可以使用g 跳转到特定块,或者搜索匹配正则表达式的块使用/。 add -p 的重点是从文件中选择大块,但是这个提议的解决方案需要添加整个文件,这不是 OP 想要的。
我经常使用的另一个选项只是因为我忘记了patch 选项:):
假设您已经更新了文件:aaa.txt、bbb.txt、ccc.txt,并且您想在第一次提交中 push aaa.txt 文件,然后在第二次提交中 bbb.txt 和 ccc.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
可能有点冗长,但在我看来,它提供了更多控制权。
干杯!
【讨论】: