当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当前回答
值得注意的是,要为新文件使用git-add--patch,您需要首先使用git-add--intent添加文件到索引:
git add -N file
git add -p file
其他回答
如果您使用emacs,请查看Magit,它为emacs提供了一个git接口。它非常支持分段大块(文件的一部分)。
您可以使用gitadd--interactive或gitadd-p<file>,然后使用gitcommit(而不是gitcommit-a);请参阅gitadd手册页中的交互模式,或简单地按照说明进行操作。
现代Git还提供了gitcommit——交互式(和gitcommit补丁,这是交互式提交中补丁选项的快捷方式)。
如果您喜欢从GUI执行,可以使用gitgui。通过右键单击并选择以下选项,您可以简单地标记要包含在提交中的块:
为提交准备Hunk
如果您只想添加大块的某些行,也可以选择所需的行,右键单击它们,然后:
提交的暂存行
我个人觉得这比使用git add-I更容易。其他git GUI,如Qbit或GitX,也可能具有此功能。
尝试了gitadd-p filename.x,但在mac上,我找到了gitx(http://gitx.frim.nl/或https://github.com/pieter/gitx)让我更容易地完成我想要的任务。
如上面的一个答案所示,您可以使用git add--补丁文件名.txt
或简称git add-p文件名.txt
…但对于存储库中已经存在的文件,在s中,直接在commit命令上使用--patch标志要好得多(如果您使用的是足够新的git版本):gitcommit--补丁文件名.txt
…或者,再次,简称gitcommit-p文件名.txt
…然后使用上述键(y/n等)选择要包含在提交中的行。
就像jdsumsion的答案一样,你也可以隐藏你当前的工作,但然后使用像meld这样的困难工具从隐藏中提取所选的更改。这样,您甚至可以非常容易地手动编辑大块,这在gitadd-p中有点麻烦:
$ git stash -u
$ git difftool -d -t meld stash
$ git commit -a -m "some message"
$ git stash pop
如果代码仍然有效,那么使用stash方法可以在提交之前进行测试。