Git:提交部分更改

Tam*_*Pap 24 git

Stack Overflow上存在多个问题,解决了暂存和提交文件中的部分问题.但是,我无法使其发挥作用.

比方说,我们要实现一个虚拟的数学课在PHP(语言无所谓)与像一些基本的方法:add,subtract,multiplydivide.

让我们从类定义开始:

<?php
    class Math {
    }
?>
Run Code Online (Sandbox Code Playgroud)

现在:

$ git add math.php
$ git commit -m "Create Math class."
Run Code Online (Sandbox Code Playgroud)

在下一步,我们实现这两个addsubtract四个方法:

<?php
    class Math {
        public function add($a, $b) {
            return $a + $b;
        }

        public function subtract($a, $b) {
            return $a - $b;
        }
    }
?>
Run Code Online (Sandbox Code Playgroud)

但是现在我们想要在单独的提交中提交addsubtract方法的实现.

这可能吗?

我尝试了什么

$ git add -p

出现以下内容:

在此输入图像描述

我很想将大块头分成小块,所以我按下s,出现以下内容:

在此输入图像描述

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

我们现在尝试手动编辑当前的大块头.所以我按:e.

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

在此输入图像描述

我试图简单地删除第8,9,10,11行 - 因为我只想暂存该add功能.我保存,关闭编辑器,但是git说:

Your edited hunk does not apply. Edit again (saying "no" discards!) [y/n]?

我真的很喜欢git add -p和交互式演出,所以也许这是我做错了,或者只是它不可能是我想要的,并且真的希望一些更有经验的git用户有一些指令也许对我来说也是一个解决方案.

谢谢!

Ben*_*son 16

你正在做我过去所做的事情,我甚至在UNIX机器上重新创建了你的整个实验,它的工作方式和预期的一样.

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


Chr*_*ial 13

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

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

用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命令行.我强烈建议改用薄荷糖.下载msys版本,将其放在您的Program Files\Git\bin目录中并运行它(创建快捷方式)mintty -.这将获得相同的shell,但更好的一切(特别是更好的调整大小和复制和粘贴).