Kiedy uruchamiam git add -p
, czy jest sposób, aby git wybierał nowo utworzone pliki jako porcje do wybrania?
Więc jeśli utworzę nowy plik o nazwie foo.java
, a następnie uruchomię git add -p, git nie pozwoli mi wybrać zawartości tego pliku do dodania do indeksu.
git add -N
robi, po prostu dodaje określone nieśledzone pliki do indeksu, ale bez zawartości.Kiedy próbowałem
git add -p someNewFile.txt
na nowym pliku (nieśledzonym pliku), git po prostu wyświetlałNo changes.
i zatrzymywał się. Musiałem powiedzieć gitowi, że zamierzałem najpierw śledzić nowy plik.Jednak ponieważ plik nie został prześledzony, pojawiłby się jako jeden gigantyczny kawałek, którego nie można podzielić (ponieważ jest nowy!). Musiałem więc edytować fragment na mniejsze części. Jeśli nie jesteś tego zaznajomiony, sprawdź to odniesienie, aby rozpocząć.
Aktualizacja - informacje o edycji Hunk Chciałem to zaktualizować na wypadek, gdyby powyższe odniesienie zniknęło. Ponieważ nowy plik nie jest śledzony,
git add -p
pokaże każdy wiersz w pliku jako nowy wiersz w jednym kawałku. Następnie zapyta Cię, co chcesz zrobić z tym kawałkiem, wyświetlając następujący monit:Stage this hunk [y,n,q,a,d,/,e,?]?
Zakładając, że nie chcesz zatwierdzać całego kawałka (a tym samym całego pliku; ponieważ nie jestem pewien, dlaczego miałbyś chcieć użyć
git add -p
w tym przypadku?), Będziesz chciał określić opcję,e
aby powiedzieć gitowi, że chcesz edytować przystojniak.Gdy powiesz gitowi, że chcesz edytować fragment, powinien on przenieść Cię do wybranego edytora, abyś mógł wprowadzić zmiany. Wszystkie wiersze powinny być poprzedzone a,
+
a git ma#
na końcu pliku kilka komentarzy wyjaśniających (z prefiksem a ). Po prostu usuń wszystkie wiersze, których nie chcesz, w początkowym zatwierdzeniu pliku. Następnie zapisz i zamknij edytor.Git's wyjaśnienie opcji hunk gita:
źródło
git add -N someNewFile.txt
a następniegit add -p
git add -p
tak naprawdę polega na dodawaniu zmian do już śledzonych plików.Polecenie do interaktywnego wybierania plików do dodania to
git add -i
. Na przykład:(Prawdziwe polecenie ma kolory, których nie mogłem tutaj wyciąć i wkleić, więc jest ładniejsze niż się wydaje)
Właściwie komenda p atch
git add -i
robi to samogit add -p
, więc druga jest podzbiorem pierwszej (chociaż przyznaję, że kochamadd -p
i nienawidzęadd -i
siebie!).źródło
No changes.
nowy plik. OP pytał, jak dodać porcje z nowego pliku, a nie z całego pliku. Uważam, że--intent-to-add
jest to nadal wymagane.add -p
Samo nie zadziała, ale ta odpowiedź sugerujeadd -i
, że tak.git add -i
. Jednak możesz zrobić to samo bez interakcjigit add -N
.Jest też bardzo podobne podejście z użyciem
--cached
flagi ...1) Zamień swoje niestacjonarne zmiany w staged, tak jak dodany plik.
2) Spójrz na różnicę (uwaga: możesz dołączyć zarówno edycje, jak i nowe pliki).
3) Utwórz poprawkę.
źródło
git add -p
to, że nie dodaje wszystkiego, ale pozwól mi wybrać to, co chcę dodać. To rozwiązanie dodałoby wszystko na ślepo.Odpowiedź Catshoes obejmuje:
To powinno się wkrótce zmienić w Git 2.29 (Q4 2020).
Najnowsze wersje "
git diff-files
" ( man ) pokazują różnicę między indeksem a drzewem roboczym dla ścieżek "zamierzających dodać" jako łatkę "nowego pliku";"
git apply --cached
" ( człowiek ) powinien być w stanie obrać "git diff-files
" i powinien działać jako odpowiednik "git add
" dla ścieżki, ale polecenie nie zrobiło tego dla takiej ścieżki.Zobacz commit 4c025c6 , commit e3cc41b (08 sierpnia 2020) i commit 7cfde3f (06 sierpnia 2020) autorstwa Raymonda E. Pasco (
juped
) .(Scalone przez Junio C Hamano -
gitster
- w zobowiązaniu ca81676 , 17 sierpnia 2020 r.)źródło
git add -N + git add -p
ręczną edycją porcji