精确的git station by line

时间:2014-10-31 21:11:31

标签: git

我使用git同时使用命令行和GUI,我曾经使用SourceTree作为Git GUI,而在SourceTree中,你可以,对于文件中的每个修改,可视化添加/删除的行,并且变化区域是包装成你可以添加或不添加的块。

例如,让我们拿这个文件:

Foo
Bar
Baz
Git is awesome!

我将其修改为:

Foo
Modif 1
Bar
Baz
Git is awesome!
Modif 2

SourceTree允许您只选择" Modif1"要进行提交,将Modif2保留在我的本地文件中,但不会被删除。

但是git status只会给我一些修改过的文件的名称,而且您无法精确地处理将要上演的内容以及不会上演的内容。

我怎样才能在命令行中实现这种精度?

我找到的唯一方法是git diff,删除你不想上演的所有部分,然后提交,并替换你尚未上演的部分。这非常不方便。

1 个答案:

答案 0 :(得分:1)

如果你为git add命令包含'-p'标志,Git将允许你暂存文件块。使用你的例子中的文件,我们称之为foo.txt,你可以在不修改其余部分的情况下登台“Modif 1”行:

git add -p foo.txt
然后,Git将为您提供输出,显示文件差异的一部分并询问要播放的内容。如果输入'?'在propmt,你会收到一条帮助信息,解释你的选择。对于示例中的文件,两个修改都包含在第一个大块中,但是如果你在分段提示符下提供's',那么大块将分成较小的块,允许你通过提供'y'来进行第一次修改',然后回答'n'到第二个变化。如果再次运行git status,您将看到在分阶段和非分阶段更改下列出的文件。运行'git diff'命令将显示未暂存的更改集,运行'git diff --cached'将显示已暂存的更改集。