Как я могу выделить отдельные строки из удаленного файла в Git? - PullRequest
1 голос
/ 28 января 2020

Я удалил файл из моего рабочего дерева, разделив его содержимое и переместив в отдельные файлы. Я сделал всю эту работу сразу, и теперь я хочу зафиксировать изменения как отдельные коммиты, при этом каждый коммит перемещает одну секцию большого файла в новый меньший файл.

Т.е. у меня есть:

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 gui или git add -p). Но при удалении файла, когда я пытаюсь это сделать, мой запрос игнорируется - это либо весь файл, либо ничего.

Я знаю, что могу использовать git add -N для неотслеживаемого файла, чтобы указать, что он будет добавлен , а затем выберите отдельные строки из этого файла, чтобы добавить его в первый коммит. Но выполнение git add -N для удаленного файла не дает того же эффекта.

Итак: есть ли способ, которым я могу выделить отдельные строки из удаленного файла и распределить это удаление по нескольким коммитам? Это без необходимости go вернуть назад, воскресить файл и сделать удаления один за другим, что, конечно, является опцией грубой силы.

1 Ответ

1 голос
/ 28 января 2020

Git не имеет этого встроенного, но вы можете достичь этого тривиально: просто напишите пустой файл в ваше рабочее дерево.

cp /dev/null big.txt

или:

: > big.txt

например в типичной оболочке Unix / Linux. Теперь у вас есть пустой файл - длиной 0 байт - как ваш big.txt, и вы можете запустить git add -p как обычно.

(Это не экономит много усилий, так как git add -p обрабатывает все удаление как один большой кусок, но это может быть то, что вы хотели.)

...