当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当我对Git中的文件进行更改时,如何才能只提交部分更改?
例如,如何在文件中更改的30行中只提交15行?
当前回答
IntelliJ IDEA(以及我猜该系列的所有其他产品)自2018.1版起就内置了对部分提交的支持。
其他回答
如果你碰巧在使用VS代码,那你就幸运了。选择要暂存的范围,然后使用Git:Sstage Selected Ranges暂存它们,如果需要,请提交。
我录制了一张gif图来演示我的意思:
git meld索引--引用自网站:
git-meld-index运行meld——或任何其他gitdifftool(kdiff3、diffuse等)——允许您以交互方式将更改转移到git索引(也称为git暂存区)。
这与git add-p和git add-interactive的功能类似。在某些情况下,meld比gitadd-p更容易/更快使用。这是因为meld允许你,例如:
查看更多上下文参见行内差异手动编辑并查看“实时”差异更新(每次按键后更新)导航到更改,而不必对要跳过的每个更改说“n”
用法
在git存储库中,运行:
git meld-index
您将看到meld(或您配置的gitdifftool)弹出:
左:从工作树复制的临时目录连续文件
RIGHT:包含索引内容的临时目录。这还包括尚未在索引中但在工作副本中已修改或未跟踪的文件——在本例中,您将从HEAD中看到文件内容。
编辑索引(右手边)直到满意。记得在需要时保存。
完成后,关闭meld,git meld索引将更新索引,以匹配刚刚编辑的meld右侧临时目录的内容。
就像jdsumsion的答案一样,你也可以隐藏你当前的工作,但然后使用像meld这样的困难工具从隐藏中提取所选的更改。这样,您甚至可以非常容易地手动编辑大块,这在gitadd-p中有点麻烦:
$ git stash -u
$ git difftool -d -t meld stash
$ git commit -a -m "some message"
$ git stash pop
如果代码仍然有效,那么使用stash方法可以在提交之前进行测试。
对于emacs,还有gitsum
IntelliJ IDEA(以及我猜该系列的所有其他产品)自2018.1版起就内置了对部分提交的支持。