如何使用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工具集。不过,我要试试看。