如何在 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
将整个删除视为一大块,但这可能是您想要的。)
我通过拆分文件的内容并将其移动到单独的文件中,从我的工作树中删除了一个文件。我一次完成了所有这些工作,现在我想将更改作为单独的提交提交,每次提交都会将大文件的一部分移动到一个新的小文件中。
即我有:
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
将整个删除视为一大块,但这可能是您想要的。)