Git:提交部分更改

时间:2013-04-21 18:24:55

标签: git

Stack Overflow上有很多问题可以解决暂存和提交文件中的部分问题。但是,我无法使其发挥作用。

假设我们想要在php中实现虚拟数学类(语言无关紧要),并使用一些基本方法:addsubtractmultiply和{{1 }}

让我们从类定义开始:

divide.

现在:

<?php
    class Math {
    }
?>

在下一步中,我们实施了$ git add math.php $ git commit -m "Create Math class." add四种方法:

subtract

但是现在我们要在单独的提交中提交<?php class Math { public function add($a, $b) { return $a + $b; } public function subtract($a, $b) { return $a - $b; } } ?> add方法的实现。

这可能吗?

我尝试了什么

subtract

出现以下内容:

enter image description here

我很想将大块头分成小块,所以我按$ git add -p,然后出现以下内容:

enter image description here

似乎git没有把它分成更小的帅哥。

现在让我们尝试手动编辑当前的大块头。所以我按下:s

我的默认文本编辑器(崇高文本)打开了,在这里我可以编辑hunk:

enter image description here

我尝试简单地删除第8,9,10,11行 - 因为我只想暂存e函数。 我保存,关闭编辑器,但是git说:

add

我是Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]?和交互式分段的新手,所以也许这是我做错的事情,或者说它不可能是我想要的,并且真的希望一些更有经验的git用户有一些指令也许是一个解决方案对我来说。

谢谢!

2 个答案:

答案 0 :(得分:16)

您正在完成我过去所做的工作,我甚至在UNIX计算机上重新创建了您的整个实验,并且它按预期工作。

我怀疑你的编辑器在保存时会更改diff hunk中的行结尾。

答案 1 :(得分:13)

由于git喜欢命令行,所以这并不像是绝对的“git方式”,但这就是我所做的:

Git与git gui捆绑在一起 - 您可以通过运行该命令来启动它。在那里,您可以选择未分级的文件,标记要提交的行,然后单击“提交阶段行”。如果您希望它的行为更像命令行工具,则可以运行git gui citool,这样会在您提交时关闭ui。

Partial staging with git gui

请注意,此工具已与git正确集成。你不需要在这个ui中进行提交。您可以暂存相关的行,关闭它,也许再做一些git add然后通过命令行提交。

总的来说,我喜欢git命令行界面,尽管我不一定是贝壳粉丝,但我会在一段时间之后爱上它。我尝试了多个GUI并将它们全部扔掉,因为它们无法与git命令行界面竞争。但是对于git add -p我肯定会说这是GUI的任务。使用git gui进行部分提交会更容易。复杂的历史浏览也是如此。 gitk(也附带git)比git log --graph -p做得更好(只要你真的需要了解树,现在还不了解历史状态)。

注意:但你似乎仍然做得很对 - 我尝试过你所做的并且必须同意Ben Jackson。那肯定会奏效。你的编辑必须搞砸了。

最终注释:您似乎正在使用带有标准Windows cmd终端的git命令行。我强烈建议您切换到mintty。下载msys版本,将其放在Program Files\Git\bin目录中并使用mintty -运行它(创建快捷方式)。这将获得相同的外壳,但更好的一切(特别是更好的调整大小和复制和粘贴)。