【问题标题】:How can I stage individual lines from a deleted file in Git?如何从 Git 中的已删除文件中暂存单独的行?
【发布时间】:2020-01-28 14:04:12
【问题描述】:

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

即我有:

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

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

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

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

【问题讨论】:

  • 如果您使用更好的 GUI 工具,它可能会轻松处理。我建议尝试 git-fork
  • @JoePhillips 我以为我都看过了,但我以前从未遇到过git-fork。哇,它甚至还有一个用于交互式变基的 UI!我一定会试一试的。

标签: git git-gui


【解决方案1】:

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

cp /dev/null big.txt

或:

: > big.txt

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

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

【讨论】:

  • git guigit rm 文件上执行此操作时的行为有点奇怪 - 我发现如果我运行 git rm 然后创建一个空文件,然后我必须取消暂存已删除的版本 并重新扫描,以便git gui 向我显示差异。但这确实起到了作用!
猜你喜欢
  • 1970-01-01
  • 2013-11-12
  • 2012-03-24
  • 2018-12-18
  • 2014-09-14
  • 2021-01-19
  • 2012-07-09
  • 2019-11-09
  • 1970-01-01
相关资源
最近更新 更多