Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用GitBash在git中放置单行?_Git - Fatal编程技术网

如何使用GitBash在git中放置单行?

如何使用GitBash在git中放置单行?,git,Git,只需创建一个包含空test.txt文件的文件夹,添加并提交它。 然后添加以下内容: new line keep new line skip new line bad new line keep 2 现在假设,我只想保留第一行和最后一行。根据这一点,我应该能够使用git add-I-p test.txt和s选项分割单个大块头,但这不起作用(并且该选项不显示)。我错过了什么吗? diff看起来正常: 问题:怎么了?我修改成功了 然后我想退出,但是 这在git gui中很容易做到。在暂存

只需创建一个包含空
test.txt
文件的文件夹,添加并提交它。 然后添加以下内容:

new line keep

new line skip

new line bad

new line keep 2
现在假设,我只想保留第一行和最后一行。根据这一点,我应该能够使用
git add-I-p test.txt
s
选项分割单个大块头,但这不起作用(并且该选项不显示)。我错过了什么吗?
diff
看起来正常:


问题:怎么了?我修改成功了

然后我想退出,但是

这在
git gui
中很容易做到。在暂存窗口中选择该文件。突出显示所需行,然后在文本区域中单击鼠标右键,然后选择“提交的阶段行”

对于命令行: 选择
e
手动分割大块。这将打开一个文本编辑器。对于您不想暂存的任何行,将
+
更改为
#

+ new line keep
+
#new line skip
#
#new line bad
#
+new line keep 2
(这是一条很长的注释,需要格式化,而不是答案。请参阅以获取直接答案。)

git add-p的“split”选项只处理diff hunk有两个融合子更改的情况:

@@ ...
 context
+new1
 context
 context
+new2
 context
例如,可以拆分,但:

@@ ...
 context
+new1
+new2
 context
不能分割:这是一个单一的变化,而不是两个变化的上下文相邻(或重叠),因此融合成一个大块

要获得git add-p来应用这样的补丁,您必须将补丁转换为只在补丁中添加(和/或删除)某些行的指令。正如meta指令所说,这涉及到删除(或注释掉)添加的行,而这些行毕竟不想添加,并替换不想删除的行上的减号。即:

@@ ...
 context-above
+new1
-old
+new2
 context-below
应成为:

@@ ...
 context-above
+new1
 old
 context-below
通过阅读可以看到,结果是一组说明:在原始文件中,找到上面阅读
上下文的行,然后找到
旧的
,然后找到下面的
上下文作为上下文。在该区域中,插入新行
new1

一些最新版本的Git在遵循
Git add-p
中的正确补丁指令时出现问题。如果你点击了这些特定的Git版本,你的选择是将Git降级到一个没有bug的版本,将Git升级到一个有bug修复的版本,或者我个人的最爱,不要为这种愚蠢的“修改补丁以制作新补丁”的方法而烦恼:只需将文件复制到VCS之外


版本控制系统是一个工具集。如果它的锤子和锯子都不能解决你的问题,那么就没有理由把螺丝刀当作凿子来使用。只需将文件移到另一个工作台,那里有一个方便的拼图或路由器,使工作变得简单,并使用它。

但它在git bash中不起作用??顺便说一句:似乎我不能添加换行符?结果看起来像是
新行保留new line keep 2
?@Christoph和你一样,我很重视这个有用的答案,但也很想知道CLI。看起来你删除了这些行。您想用
#
替换
+
,谢谢您的解释。我可以请你帮个忙吗?不久前我有一个问题,我仍然对“初学者的答案”感兴趣。Git参考非常好,但在很多情况下初学者会迷失在细节中。我对一两个最重要的用例很满意……不幸的是,这些细节真的很重要。您需要了解他们才能有效地使用Git工具集。不过,我要试试看。