'git add --patch', чтобы включить новые файлы?

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

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

75 голосов | спросил Alexander Bird 24 Jam1000000amThu, 24 Jan 2013 04:09:49 +040013 2013, 04:09:49

4 ответа


0

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

git add -N .
git add -p

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

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

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

ответил Ulysse BN 11 PM00000080000003231 2017, 20:44:32
0

Когда я пытался 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
ответил CatShoes 1 AM000000120000000431 2013, 00:38:04
0

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 себя!).

ответил Matthieu Moy 23 PM00000050000004931 2017, 17:07:49
0

Существует также очень похожий подход, использующий флаг --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
ответил doublejosh 16 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 16 Sep 2016 23:52:48 +0300 2016, 23:52:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132