如何在Git中暂存已删除文件中的单个行?

如何在Git中暂存已删除文件中的单个行?,git,git-gui,Git,Git Gui,我已经从我的工作树中删除了一个文件,方法是将其内容拆分并移动到不同的文件中。我一次完成了所有这些工作,现在我想将更改作为单个提交提交,每次提交都将大文件的一部分移动到一个新的较小文件中 即我有: Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard

我已经从我的工作树中删除了一个文件,方法是将其内容拆分并移动到不同的文件中。我一次完成了所有这些工作,现在我想将更改作为单个提交提交,每次提交都将大文件的一部分移动到一个新的较小文件中

即我有:

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    big.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        small-1.txt
        small-2.txt
        small-3.txt
        small-4.txt

no changes added to commit (use "git add" and/or "git commit -a")
通常,在准备更改时,我只需使用GitGUI或GitAdd-p选择与提交相关的大块或行。但是,当我尝试这样做时,如果文件被删除,我的请求就会被忽略——要么是整个文件,要么什么都没有

我知道我可以在未跟踪的文件上使用git add-N来指定要添加的文件,然后从该文件中选择要在第一次提交时添加的行。但是在删除的文件上运行git add-N并没有相同的效果


那么:有没有一种方法可以从一个已删除的文件中分阶段删除单独的行,并将该删除分散到多个提交中?这是无需返回、恢复文件并逐个删除的,这当然是蛮力选项。

Git没有内置此功能,但您可以轻松实现:只需在工作树中写入一个空文件

cp /dev/null big.txt
或:

例如,在典型的Unix/Linux shell中。您现在有一个零字节长的空文件,与big.txt一样,您可以像往常一样运行git add-p


这并没有节省很多精力,因为git add-p将整个删除视为一个大块头,但这可能是您想要的。

如果您使用更好的GUI工具,它可能会很容易处理。我建议试试git-fork@JoePhillips我以为我都见过,但我以前从未见过。哇,它甚至有一个交互重新基址的用户界面!我肯定会尝试一下。在git rm文件上执行此操作时,git gui的行为有点奇怪–我发现,如果我运行了git rm,然后生成一个空文件,那么我必须取消已删除版本的存储,然后重新扫描,以便git gui显示差异。但这确实可以做到!
: > big.txt