'git add --patch' для включения новых файлов?


когда я запускаю git add -p, есть ли способ для git выбрать новые файлы в качестве кусков для выбора??

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

4 69

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