堆栈溢出有多个问题,解决了文件中的分段和只提交部分的问题。但是,我做不到。
假设我们想用PHP(语言无关紧要)实现一个虚拟的数学类,使用一些基本方法,比如:add、subtract、multiply和divide.。
让我们从类定义开始:
1 2 3 4
| <?php
class Math {
}
?> |
现在:
1 2
| $ git add math.php
$ git commit -m"Create Math class." |
号
在下一步中,我们实现了add和subtract四种方法:
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;
}
}
?> |
但现在,我们要分别提交add和subtract方法的实现。
这有可能吗?
我试过的
埃多克斯1〔8〕
出现以下内容:
。
我很想把大块分割成更小的大块,所以我按s,如下所示:
氧化镁
看来吉特并没有把它分割成更小的大块。
现在让我们尝试手动编辑当前的Hunk。所以我按:e。
我的默认文本编辑器(Sublime Text)打开,在这里我可以编辑Hunk:
氧化镁
我试图简单地删除第8、9、10、11行,因为我只想准备add函数。我保存,关闭编辑器,但Git说:
埃多克斯1〔12〕
我对git add -p和交互登台很陌生,所以可能是我做错了什么,或者只是我想要的东西不可能,真的希望一些更有经验的git用户有一些说明,也许也是我的解决方案。
谢谢您!
- 你是想学习"吉特方式"吗?就我个人而言,我不在乎这些细节。我只需要删除一个函数,提交它,重新添加它,然后提交它。
- 是的,这正是我在上一个项目中所做的。也许这是更简单的方法。不过,我很想用Git来做,然后决定选择哪种方式。
- 在git中只提交文件的一部分的可能副本
您所做的正是我过去所做的,我甚至在一台Unix机器上重新创建了您的整个实验,它工作正常。
我怀疑你的编辑在保存时正在更改diff块中的行尾。
- 我回来了。我将所有编辑器设置为使用Unix行尾,一切都按预期工作。
这不像是一种绝对的"git方式",因为git喜欢命令行,但我要做的是:
Git与git gui捆绑在一起—您可以通过运行该命令来启动它。在那里,您可以选择未分页的文件,标记要提交的行,然后单击"准备提交的行"。如果您希望它的行为更像一个命令行工具,那么您可以运行git gui citool,这会影响到提交时UI将关闭。
。
请注意,此工具与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 -运行它(创建一个快捷方式)。这将使您获得相同的外壳,但具有更好的一切(尤其是更好的大小调整和复制粘贴)。
- git add -p是传统的git方式。我一直使用它,从来没有遇到过任何问题。可能只是编辑器似乎没有添加Git所期望的正确的行尾。btw要在Windows上使用git gui,您应该使用cygwin或msys。
- 我知道,git add -p是有效的,应该为op试图实现的目标而努力。我的观点是,当您可以在文件中正确滚动并分段单行而不必切换到编辑器时,可以更容易地分段文件的某些部分。如果您在Windows上使用Git,那么它总是与cygwin或msys一起使用——由于其shell脚本,Git根本无法在Windows上本地运行。
- 感谢您的详细评论。我还尝试了git-gui,但出现了相同的错误。正如本·杰克逊和你指出的那样,行尾是解决问题的关键。现在,GitGUI也按预期工作。