Подтвердить что ты не робот

'git добавить --patch' для добавления новых файлов?

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

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

4b9b3361

Ответ 1

Чтобы сделать это с каждым новым файлом, вы можете запустить:

git add -N .
git add -p

Если вы хотите часто использовать его, вы можете создать псевдоним в ~/.bashrc:

alias gapan='git add --intent-to-add . && git add --patch'

N.B: Если вы используете это с пустым новым файлом, git не сможет его исправить и перейти к следующему.

Ответ 2

Когда я попробовал git add -p someNewFile.txt в новом файле (файл без следа), git просто вывел бы No changes. и остановился. Я должен был сообщить git, что я намеревался сначала отслеживать новый файл.

git add -N someNewFile.txt
git add -p

Однако, поскольку файл был не проверен, он будет отображаться как один гигантский кусок, который нельзя разбить (потому что он все новый!). Итак, мне нужно было отредактировать кусок на меньшие бит. Если вы не знакомы с этим, проверьте эту ссылку, чтобы начать.

Обновление - информация для редактирования Hunk Я хотел бы обновить это, если вышеупомянутая ссылка исчезнет. Поскольку новый файл не отслеживается, git add -p будет отображать каждую строку в файле в виде новой строки в одном столбце. Затем он спросит вас, что вы хотите сделать с этим hunk, предоставив вам следующее приглашение:

Stage this hunk [y,n,q,a,d,/,e,?]?

Предполагая, что вы не хотите фиксировать весь hunk (и, следовательно, весь файл, потому что я не уверен, почему вы хотели бы использовать git add -p в этом случае?), вам нужно указать опцию e сообщить git, что вы хотите отредактировать hunk.

После того, как вы скажете git, что вы хотите отредактировать кусок, он должен бросить вас в ваш редактор, чтобы вы могли внести свои изменения. Все строки должны иметь префикс +, а git содержит несколько пояснительных комментариев (с префиксом #) в конце файла. Просто удалите любые строки, которые вы не хотите в своей первоначальной фиксации файла. Затем сохраните и закройте редактор.

Git объяснение git параметров hunk:

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

Ответ 3

Также существует очень похожий подход, использующий флаг --cached...

1) Превратите свои неустановленные изменения в поэтапные, как и ваш добавленный файл.

git add edited-file.txt
git add new-file.txt
git add directory-of-changes/

2) Посмотрите на diff (обратите внимание: вы можете включать как изменения, так и новые файлы).

git diff --cached

3) Создать патч.

git diff --cached > my_patch_file.patch

Ответ 4

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 atch git add -i делает то же самое, что и git add -p, поэтому вторая является подмножеством первой (даже если я признаю, что люблю add -p и ненавижу add -i себя!).