当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当前回答
如上面的一个答案所示,您可以使用git add--补丁文件名.txt
或简称git add-p文件名.txt
…但对于存储库中已经存在的文件,在s中,直接在commit命令上使用--patch标志要好得多(如果您使用的是足够新的git版本):gitcommit--补丁文件名.txt
…或者,再次,简称gitcommit-p文件名.txt
…然后使用上述键(y/n等)选择要包含在提交中的行。
其他回答
使用TortoiseGit:
右键单击文件并使用上下文菜单→ 提交后恢复。这将按原样创建文件的副本。然后您可以编辑该文件,例如在TortoiseGitMerge中,并撤消所有不想提交的更改。保存这些更改后,您可以提交文件。
这个问题已经问了10年了。我希望这个答案对某人有用。正如这里的答案中所提到的,在GUI不是选项的情况下,AndrejShadura的gitcrecord工具有助于提供一个交互式窗口,我们可以在其中选择要提交的行。
按如下方式设置扩展:
git clone https://github.com/andrewshadura/git-crecord
cd git-crecord
./setup.py install
ln -s $PWD/git-crecord ~/.local/bin/git-crecord
cd到git repo并按如下方式调用它:
git crecord
这将带来一个交互式界面,可以使用如下所示。按下以下键将执行某些操作:
f hunk toggle fold (arrow keys can also be used)
space toggle hunk selection
a toggle commit or amend
c confirm and open commit window
显示示例用法的屏幕广播
当我有很多更改,并且最终将根据这些更改创建一些提交时,我希望在暂存之前暂时保存我的起点。
这样地:
$ git stash -u
Saved working directory and index state WIP on master: 47a1413 ...
$ git checkout -p stash
... step through patch hunks
$ git commit -m "message for 1st commit"
$ git checkout -p stash
... step through patch hunks
$ git commit -m "message for 2nd commit"
$ git stash pop
Whymharh的回答是我通常会做的,但有时会有很多变化,我可以告诉你,我可能会在表演过程中犯错误,我想要一个可以依靠第二次传球的坚定状态。
加上前面的回答,如果您更喜欢使用命令行,输入git add-e myfile可以让您选择逐行选择要提交的内容,因为此命令将打开一个具有不同之处的编辑器,如下所示:
正如你可能知道的那样,以+开头的行是加法,以-开头的行则是删除。因此:
要不进行添加,只需删除该行。要不进行删除,只需用空格替换。
这就是git add-h所说的通过这种方式添加文件(修补文件):
添加的内容添加的内容由以“+”开头的行表示。你可以通过删除添加行来防止暂存任何添加行。删除的内容:删除的内容由以“-”开头的行表示。你可以通过将“-”转换为“”来防止临时删除(空格)。修改内容:修改的内容由“-”行表示(删除旧的内容),后跟“+”行(添加替换内容)。您可以通过将“-”行转换为“”,并删除“+”行。请注意,仅修改这对组合很可能会给指数带来令人困惑的变化。
注意:不要更改文件的内容,这不是一个好地方。只需更改删除或添加行的运算符即可。
从2018年答案的评论来看:
很遗憾,Visual Studio没有此选项。大约10年前,替代源代码控制系统Mercurial在Visual Studio中支持此功能。自从我使用Git以来,我真的很怀念它。
现在(2022年8月)支持:
Git Line登台发布!我们很高兴地宣布在Visual Studio 2022中发布Line登台支持。行分段,也称为交互式分段,使您能够在不同的提交中拆分更改的代码行。在提交更改之前,还可以使用行分段来检查更改。将更改后的代码行或代码段标记为通过分段进行审查,并在完成后提交分段的更改。通过将Visual Studio 2022更新到17.3版或更高版本,开始使用Line staging。阅读我们的Line登台文档,了解有关如何使用和自定义此功能的更多信息。