Git:提交部分更改
Stack Overflow有多个问题来解决暂存和仅提交文件部分的问题。 但是,我无法让它工作。
假设我们想用一些基本方法在php中实现一个虚拟数学类(语言无所谓),如: add
, subtract
, multiply
和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
出现以下内容:
我很乐意将大块头分成小块,所以我按s
,出现以下内容:
git似乎没有将它分成更小的区块。
现在我们尝试手动编辑当前的大块。 所以我按: e
。
我的默认文本编辑器(崇高文本)打开,在这里我可以编辑大块:
我试着简单地删除第8,9,10,11行 - 因为我只想add
函数。 我保存,关闭编辑器,但git说:
Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]?
我对git add -p
和交互式登台非常陌生,所以也许这是我做错的一件事,或者根本不可能实现我想要的,并且真的希望一些更有经验的git用户有一些指示可能也是我的一个解决方案。
谢谢!
你正在做我以前完成的工作,我甚至在UNIX机器上重新创建了整个实验,并且它的工作方式与预期的一样。
我怀疑你的编辑在节省时正在改变差异的结尾。
因为git喜欢命令行,所以这并不是绝对的“git方法”,但这是我所做的:
Git捆绑了git gui
- 你可以通过运行这个命令来启动它。 在那里你可以选择未分类的文件,标记你要提交的行并点击“提交阶段行”。 如果你希望它更像是一个命令行工具,你可以运行git gui citool
,这会影响到你在提交时ui会关闭的效果。
请注意,此工具已正确与git集成。 你不需要在这个UI中做出承诺。 你可以将相关的行关闭,关闭它,也许再做一些git add
,然后通过命令行提交。
一般来说,我喜欢git comand界面,尽管我不一定是shell粉丝,但我只是在一段时间后才喜欢它。 我尝试了多个GUI,并将它们全部扔掉,因为它们无法与git命令行界面竞争。 但是对于git add -p
我肯定会说这是GUI的一项任务。 使用git gui
部分提交更容易。 复杂的历史浏览也一样。 gitk
(也附带git)在git log --graph -p
(只要你确实需要了解树并且不太了解历史状态)方面做得比git log --graph -p
更好。
注意:但是你似乎仍然在做一切正确的事情 - 我尝试了你所做的并且必须同意本杰克逊。 这应该肯定有效。 你的编辑必须搞砸了。
最后说明 :您似乎正在使用标准windows cmd
终端的git命令行。 我强烈建议切换到mintty。 下载msys版本,把它放在你的Program FilesGitbin
目录下,用mintty -
运行它(创建一个快捷方式)。 这会让你获得相同的shell,但是更好的一切(尤其是更好的大小调整和复制和粘贴)。