Stack Overflow上有很多问题可以解决暂存和提交文件中的部分问题。但是,我无法使其发挥作用。
假设我们想要在php中实现虚拟数学类(语言无关紧要),并使用一些基本方法:add
,subtract
,multiply
和{{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
出现以下内容:
我很想将大块头分成小块,所以我按$ git add -p
,然后出现以下内容:
似乎git没有把它分成更小的帅哥。
现在让我们尝试手动编辑当前的大块头。所以我按下:s
。
我的默认文本编辑器(崇高文本)打开了,在这里我可以编辑hunk:
我尝试简单地删除第8,9,10,11行 - 因为我只想暂存e
函数。
我保存,关闭编辑器,但是git说:
add
我是Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]?
和交互式分段的新手,所以也许这是我做错的事情,或者说它不可能是我想要的,并且真的希望一些更有经验的git用户有一些指令也许是一个解决方案对我来说。
谢谢!
答案 0 :(得分:16)
您正在完成我过去所做的工作,我甚至在UNIX计算机上重新创建了您的整个实验,并且它按预期工作。
我怀疑你的编辑器在保存时会更改diff hunk中的行结尾。
答案 1 :(得分:13)
由于git喜欢命令行,所以这并不像是绝对的“git方式”,但这就是我所做的:
Git与git gui
捆绑在一起 - 您可以通过运行该命令来启动它。在那里,您可以选择未分级的文件,标记要提交的行,然后单击“提交阶段行”。如果您希望它的行为更像命令行工具,则可以运行git gui citool
,这样会在您提交时关闭ui。
请注意,此工具已与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 -
运行它(创建快捷方式)。这将获得相同的外壳,但更好的一切(特别是更好的调整大小和复制和粘贴)。