Git:提交部分更改


Git: commit partial changes

堆栈溢出有多个问题,解决了文件中的分段和只提交部分的问题。但是,我做不到。

  • 我怎样才能在Git中只提交文件的一部分

假设我们想用PHP(语言无关紧要)实现一个虚拟的数学类,使用一些基本方法,比如:addsubtractmultiplydivide.

让我们从类定义开始:

1
2
3
4
<?php
    class Math {
    }
?>

现在:

1
2
$ git add math.php
$ git commit -m"Create Math class."

在下一步中,我们实现了addsubtract四种方法:

1
2
3
4
5
6
7
8
9
10
11
<?php
    class Math {
        public function add($a, $b) {
            return $a + $b;
        }

        public function subtract($a, $b) {
            return $a - $b;
        }
    }
?>

但现在,我们要分别提交addsubtract方法的实现。

这有可能吗?

我试过的

埃多克斯1〔8〕

出现以下内容:

enter image description here

我很想把大块分割成更小的大块,所以我按s,如下所示:

氧化镁

看来吉特并没有把它分割成更小的大块。

现在让我们尝试手动编辑当前的Hunk。所以我按:e

我的默认文本编辑器(Sublime Text)打开,在这里我可以编辑Hunk:

氧化镁

我试图简单地删除第8、9、10、11行,因为我只想准备add函数。我保存,关闭编辑器,但Git说:

埃多克斯1〔12〕

我对git add -p和交互登台很陌生,所以可能是我做错了什么,或者只是我想要的东西不可能,真的希望一些更有经验的git用户有一些说明,也许也是我的解决方案。

谢谢您!


您所做的正是我过去所做的,我甚至在一台Unix机器上重新创建了您的整个实验,它工作正常。

我怀疑你的编辑在保存时正在更改diff块中的行尾。


这不像是一种绝对的"git方式",因为git喜欢命令行,但我要做的是:

Git与git gui捆绑在一起—您可以通过运行该命令来启动它。在那里,您可以选择未分页的文件,标记要提交的行,然后单击"准备提交的行"。如果您希望它的行为更像一个命令行工具,那么您可以运行git gui citool,这会影响到提交时UI将关闭。

Partial staging with git gui

请注意,此工具与Git正确集成。您不需要在此用户界面中提交。您只需准备相关的行,关闭它,也许再执行一些git add,然后通过命令行提交。

总的来说,我喜欢Git-Comand线界面,尽管我不一定是一个shell迷,但过了一会儿我就爱上了它。我尝试了多个gui并将它们全部丢弃,因为它们无法与git命令行接口竞争。但是对于git add -p,我肯定会说这是一个GUI的任务。对于git gui,执行部分提交非常容易。复杂的历史浏览也是如此。gitk(也与git一起装运)在那里比git log --graph -p做得更好(只要你真的需要了解这棵树,而且现在不太了解历史状况)。

注意:但是你似乎做的一切都很好——我试过你做的,并且必须同意本·杰克逊。那肯定行。你的编辑一定搞砸了什么。

最后一点注意:您似乎在使用标准Windowscmd终端的git命令行。我强烈建议换成明蒂。下载msys版本,把它放在你的Program Files\Git\bin目录中,用mintty -运行它(创建一个快捷方式)。这将使您获得相同的外壳,但具有更好的一切(尤其是更好的大小调整和复制粘贴)。