Когда я бегу git add -p
, есть ли способ для git выбрать недавно созданные файлы в качестве фрагментов для выбора?
Поэтому, если я создам новый файл с именем foo.java
, а затем запустите git add -p, git не позволит мне выбрать содержимое этого файла для добавления в индекс.
git add -N
делает, он просто добавляет указанные неотслеживаемые файлы в индекс, но без содержимого.Когда я пробовал
git add -p someNewFile.txt
новый файл (неотслеживаемый файл), git просто выводилNo changes.
и останавливался. Мне пришлось сказать git, что я намереваюсь сначала отследить новый файл.Однако, поскольку файл не отслеживался, он отображался как один гигантский кусок, который нельзя было разделить (потому что он все новый!). Итак, мне нужно было отредактировать кусок на более мелкие части. Если вы не знакомы с этим, ознакомьтесь с этой ссылкой, чтобы начать работу.
Обновление - информация о редактировании фрагмента. Я хотел обновить это на случай, если указанная выше ссылка исчезнет. Поскольку новый файл не отслеживается,
git add -p
каждая строка в файле будет отображаться как новая строка в одном фрагменте. Затем он спросит вас, что вы хотите сделать с этим фрагментом, предоставив вам следующую подсказку:Stage this hunk [y,n,q,a,d,/,e,?]?
Предполагая, что вы не хотите фиксировать весь кусок (и, следовательно, весь файл; потому что я не уверен, почему вы хотите использовать
git add -p
в этом случае?), Вы захотите указать параметр,e
чтобы сообщить git, что вы хотите отредактировать ломоть.Как только вы сообщите git, что хотите отредактировать кусок, он должен перетащить вас в выбранный вами редактор, чтобы вы могли внести свои изменения. Все строки должны иметь префикс a,
+
а#
в конце файла git есть пояснительные комментарии (с префиксом a ). Просто удалите все строки, которые вам не нужны при первоначальной фиксации файла. Затем сохраните и выйдите из редактора.Объяснение Git опций фрагментов git:
источник
git add -N someNewFile.txt
далееgit add -p
git add -p
действительно о добавлении изменений в уже отслеживаемые файлы.Команда для интерактивного выбора файлов для добавления -
git add -i
. Например:(Настоящая команда имеет цвета, которые я не мог вырезать и вставить здесь, так что это лучше, чем кажется)
На самом деле команда p atch
git add -i
выполняет то же самое, что иgit add -p
, поэтому вторая часть является подмножеством первой (хотя я признаю, что люблюadd -p
и ненавижуadd -i
себя!).источник
No changes.
в новом файле. OP спрашивал, как добавить фрагменты из нового файла, а не всего файла. Я считаю, что--intent-to-add
здесь все еще требуется.add -p
сам по себе не сработает, но этот ответ предполагаетadd -i
, что это так.git add -i
. Однако вы можете делать то же самое не интерактивно сgit add -N
.Также есть очень похожий подход с использованием
--cached
флага ...1) Превратите ваши неустановленные изменения в поэтапные, как и ваш добавленный файл.
2) Посмотрите на разницу (примечание: вы можете включать как правки, так и новые файлы).
3) Создайте патч.
источник
git add -p
это то, что он не добавляет все, но позвольте мне выбрать то, что я хочу добавить. Это решение слепо добавляло бы все.Ответ Catshoes включает:
Это должно скоро измениться с выходом Git 2.29 (4 квартал 2020 г.).
Последние версии «
git diff-files
» ( man ) показывают разницу между индексом и рабочим деревом для путей «с намерением добавить» как патч «новый файл»;"
git apply --cached
" ( man ) должен иметь возможность принимать "git diff-files
" и действовать как эквивалент "git add
" для пути, но команда не смогла этого сделать для такого пути.См. Коммит 4c025c6 , коммит e3cc41b (8 августа 2020 г.) и коммит 7cfde3f (6 августа 2020 г.) Раймонда Э. Паско (
juped
) .(Объединено Junio C Hamano -
gitster
- в коммите ca81676 , 17 августа 2020 г.)источник
git add -N + git add -p
ручным редактированием