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

How can I stage individual lines from a deleted file in Git?

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

即我有:

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")

通常在暂存我的更改时,我只 select 与该提交相关的块或行(使用 git gui,比如说,或 git add -p)。但是当我尝试执行此操作时,如果文件已删除,我的请求将被忽略——要么是整个文件,要么什么都没有。

我知道我可以在未跟踪的文件上使用 git add -N 来指定将添加它,然后 select 来自该文件的单独行以添加到它的第一次提交中。但是 运行 git add -N 对删除的文件没有同样的效果。

那么:有没有一种方法可以暂存已删除文件中的各行,并将该删除分散到多个提交中?这是不用回头,复活文件,一个一个删除,当然是暴力破解

Git 没有内置此功能,但您可以轻松实现它:只需将 empty 文件写入工作树即可。

cp /dev/null big.txt

或:

: > big.txt

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

(这不会节省很多工作,因为 git add -p 将整个删除视为一大块,但这可能是您想要的。)