'git add --patch' для включения новых файлов?
когда я запускаю git add -p
, есть ли способ для git выбрать новые файлы в качестве кусков для выбора??
Так что если я сделаю новый файл под названием foo.java
, затем запустите git add-p, git не позволит мне выбрать содержимое этого файла для добавления в индекс.
4 ответа:
чтобы сделать это с каждым новым файлом, вы можете запустить:
git add -N . git add -p
Если вы хотите использовать его часто, вы можете создать псевдоним в вашей
~/.bashrc
:alias gapan='git add --intent-to-add . && git add --patch'
N. B: если вы используете это с пустым новым файлом, git не сможет исправить его и перейти к следующему.
когда я пробовал
git add -p someNewFile.txt
на новый файл (неотслеженный файл), git будет просто выводитьNo changes.
и прекратить. Мне пришлось сказать git, что я попытался сначала новый файл.git add -N someNewFile.txt git add -p
однако, поскольку файл не был отслежен, он будет отображаться как один гигантский кусок, который не может быть разделен (потому что это все новое!). Итак, тогда мне нужно было отредактировать кусок на меньшие биты. Если вы не знакомы с этим, проверьте этой ссылке получить начатый.
обновление-ломоть редактирования информации Я хотел бы обновить это в случае, если вышеуказанная ссылка уходит. потому что новый файл не отслеживается,
git add -p
покажет каждую строку в файле как новую строку в одном куске. Затем он спросит вас, что вы хотите сделать с этим куском, давая вам следующее приглашение:
Stage this hunk [y,n,q,a,d,/,e,?]?
предполагая, что вы не хотите, чтобы совершить весь кусок (и, таким образом, весь файл; потому что я не уверен почему вы хотите использовать
git add -p
в этом случае?), вы хотите указать опциюe
чтобы сказать git, что вы хотите изменить ломоть.как только вы скажете git, что хотите отредактировать кусок, он должен бросить вас в ваш редактор выбора, так что вы можете внести свои изменения. Все строки должны иметь префикс
+
и git имеет некоторые пояснительные комментарии (с префиксом#
) в конце файла. Просто удалите все строки, которые вы не хотите в вашей первоначальной фиксации файла. Затем сохраните и закройте редактор.объяснение Git вариантов ломоть git:
y - stage this hunk n - do not stage this hunk q - quit; do not stage this hunk or any of the remaining ones a - stage this hunk and all later hunks in the file d - do not stage this hunk or any of the later hunks in the file g - select a hunk to go to / - search for a hunk matching the given regex j - leave this hunk undecided, see next undecided hunk J - leave this hunk undecided, see next hunk k - leave this hunk undecided, see previous undecided hunk K - leave this hunk undecided, see previous hunk s - split the current hunk into smaller hunks e - manually edit the current hunk ? - print help
git add -p
на самом деле о добавлении изменений в уже отслеживаемые файлы.команда для интерактивного выбора файлов для добавления -
git add -i
. Например:$ git add -i *** Commands *** 1: status 2: update 3: revert 4: add untracked 5: patch 6: diff 7: quit 8: help What now> a 1: another-new.java 2: new.java Add untracked>> 2 1: another-new.java * 2: new.java Add untracked>> added one path *** Commands *** 1: status 2: update 3: revert 4: add untracked 5: patch 6: diff 7: quit 8: help What now> q Bye. $ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: new.java Untracked files: (use "git add <file>..." to include in what will be committed) another-new.java
(реальная команда имеет цвета, которые я не мог вырезать и вставить здесь, так что это лучше, чем кажется)
на самом деле pкоманда человек из
git add -i
тут жеgit add -p
, поэтому второй является подмножеством первого (хотя я признаю, что люблюadd -p
и ненавижуadd -i
я сам!).
есть также очень похожий подход, использующий
--cached
флаг...1) превратите ваш неиндексированных изменений в постановке, как и ваш добавленный файл.
git add edited-file.txt git add new-file.txt git add directory-of-changes/
2) Посмотрите на разницу (Примечание: Вы можете включить как изменения, так и новые файлы).
git diff --cached
3) создать патч.
git diff --cached > my_patch_file.patch