git CLI 命令用于像Sourcetree一样暂存/取消暂存块/行

3
Sourcetree可以轻松地暂存和取消暂存补丁块,也可以轻松地从补丁块中选择特定的行并将其暂存或取消暂存。 我正在尝试弄清楚如何通过命令行执行相同的操作。
我尝试在Sourcetree中执行每个操作,并显示命令历史记录面板。 但是当我执行这些操作时,它不会显示任何命令。 对于其他操作,它可以正常工作。
在命令行上,我使用交互模式下的git add命令,选择补丁选项,然后选择一个具有多行更改的文件。 提示是:“Stage this hunk [y,n,q,a,d,/,e,?]?” 如果我选择“?”选项,则输出此帮助文本:
y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help

`s`选项看起来是从块中分离出单独行的正确选项。然而,当我输入它时,git只是再次输出帮助文本。
有人能告诉我应该在文档的哪个部分查找吗?

实际上,你做得很对。如果补丁块已经太小了,那么它就无法分割成更小的块,这种情况可能会发生。 - ckruczek
同一个代码块可以在Sourcetree中进行拆分。 - Michael Stack
我不熟悉SourceTree。请尝试手动编辑('e')代码块,看看会发生什么。 - ckruczek
我在多行更改的一行开头添加了一个“+”,并保存了文件。得到以下输出:阶段此块[y,n,q,a,d,/,j,J,g,e,?]?e 错误:补丁失败:changeme.txt:1 错误:changeme.txt:补丁不适用 您编辑的块无法应用。再次编辑(说“否”会丢弃!)[y/n]? - Michael Stack
是的,这种情况可能会发生。以下是一个相关的问题以及如何解决它的方法:https://dev59.com/aXA75IYBdhLWcg3wfpGr - ckruczek
1个回答

4

虽然有些晚了,但这可能对其他正在寻找解决方案的人有所帮助。

git倾向于将行添加到与同一块代码接近的地方 - 如果您想逐行暂存代码,可以在交互模式下编辑块。

文件修改后,输入:

git add -p

现在,你可以输入e来替代s

这将使你进入编辑模式以更改块。

如果你想在这个块中保留特定的行以进行暂存,请确保将其+-保留,并根据快速指南中所述编辑其他内容。

示例

假设我有以下更改:

-  allScriptsTimeout: 60000,
-  getPageTimeout: 60000
+  allScriptsTimeout: 180000,
+  getPageTimeout: 180000

然而,我只想暂存第一行发生变化的内容。如上所述,使用git add -p并选择e

在编辑器中,将-更改为空格,并删除您不想要的暂存行。

假设我只想暂存+ allScriptsTimeout: 180000,,则将文件更改为:

-  allScriptsTimeout: 60000,
   getPageTimeout: 60000
+  allScriptsTimeout: 180000,

好的,已经完成翻译,以下是结果:

这样只需要一行代码就可以准备提交了。

虽然有些繁琐,但在git CLI中逐行添加还是完全可行的 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接