当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当前回答
在所有这些工具中,我最喜欢Fork(虽然不是免费的)!
与其他游戏相比,它使用起来非常时尚优雅,单击鼠标旁边的按钮可以进行大块或线条分段。
另一个选择是GitKraken,有趣但更复杂和强大!
其他回答
加上前面的回答,如果您更喜欢使用命令行,输入git add-e myfile可以让您选择逐行选择要提交的内容,因为此命令将打开一个具有不同之处的编辑器,如下所示:
正如你可能知道的那样,以+开头的行是加法,以-开头的行则是删除。因此:
要不进行添加,只需删除该行。要不进行删除,只需用空格替换。
这就是git add-h所说的通过这种方式添加文件(修补文件):
添加的内容添加的内容由以“+”开头的行表示。你可以通过删除添加行来防止暂存任何添加行。删除的内容:删除的内容由以“-”开头的行表示。你可以通过将“-”转换为“”来防止临时删除(空格)。修改内容:修改的内容由“-”行表示(删除旧的内容),后跟“+”行(添加替换内容)。您可以通过将“-”行转换为“”,并删除“+”行。请注意,仅修改这对组合很可能会给指数带来令人困惑的变化。
注意:不要更改文件的内容,这不是一个好地方。只需更改删除或添加行的运算符即可。
值得注意的是,要为新文件使用git-add--patch,您需要首先使用git-add--intent添加文件到索引:
git add -N file
git add -p file
对于Atom用户,包github包括gitgui风格的交互式登台。有关快捷方式,请参阅软件包的文档。
使用Atom可以处理具有深色背景的主题(默认情况下,gitgui具有白色背景)。
对于emacs,还有gitsum
就像jdsumsion的答案一样,你也可以隐藏你当前的工作,但然后使用像meld这样的困难工具从隐藏中提取所选的更改。这样,您甚至可以非常容易地手动编辑大块,这在gitadd-p中有点麻烦:
$ git stash -u
$ git difftool -d -t meld stash
$ git commit -a -m "some message"
$ git stash pop
如果代码仍然有效,那么使用stash方法可以在提交之前进行测试。