Próbuję użyć git add --interactive
wybiórczo dodać pewne zmiany do mojego indeksu, ale ciągle otrzymuję komunikat „Twój edytowany fragment nie ma zastosowania. Edytuj ponownie ...”. Otrzymuję tę wiadomość, nawet jeśli wybiorę opcję e i natychmiast zapiszę / zamknę mój edytor. Innymi słowy, bez jakiejkolwiek edycji kawałka łatka nie ma zastosowania.
Oto dokładny przykład, którego używam (próbuję stworzyć małe demo):
Oryginalny plik:
first change
second change off branch
third change off branch
second change
third change
fourth change
Nowy plik:
Change supporting feature 1
first change
second change off branch
third change off branch
second change
third change
fourth change
bug fix 1
change supporting feature 1
Próbuję pokazać, jak używać git add --interactive
tylko do dodania wiersza „poprawka błędu 1” do indeksu. Uruchamiając interaktywny dodatek na pliku, wybieram tryb łatki. Przedstawia mi to
diff --git a/newfile b/newfile
index 6d501a3..8b81ae9 100644
--- a/newfile
+++ b/newfile
@@ -1,6 +1,9 @@
+Change supporting feature 1
first change
second change off branch
third change off branch
second change
third change
fourth change
+bug fix 1
+change supporting feature 1
Odpowiadam rozdzieleniem, po którym następuje „nie”, aby zastosować pierwszy fragment. Drugi kawałek, próbuję edytować. Początkowo próbowałem usunąć dolną linię - to nie zadziałało. Całkowite pozostawienie przystojniaka w spokoju też nie działa i nie mogę zrozumieć, dlaczego.
źródło
-
znaków na początku linii, których nie ma w pliku; jest to różnica i nie może usunąć linii, których jeszcze tam nie ma. Więc jeśli wiersz w pliku różnicowym zaczyna się od+
i zmienisz go na-
git, przechodzi do WTF? ponieważ teraz linia oznaczona do usunięcia nie istnieje na początku (zamiast tego ta linia została oznaczona do dodania, a kiedy linia zaznaczona do dodania jest oznaczona do usunięcia, git nie może usunąć linii, której nie ma jeszcze w pliku) .Odpowiedzi:
W tym konkretnym przykładzie musisz dostosować numery wierszy w porcji. Zmień linię:
więc zamiast tego brzmi:
źródło
Czy to jest jak w tym poście git-add ?
Zobacz także to zatwierdzenie na git add -p .
Ortomala Lokni „s odpowiedź odnosi się do Joaquín Windmuller blogu« Selektywnie wybranych zmian popełnić z git (lub Imma Edycja przystojniak) »
Zamiast liczyć linie, Git chciałby połączyć nakładające się porcje (gdy jedna jest edytowana) przed zastosowaniem wspomnianej edytowanej porcji.
Zostało to omówione w połowie 2018 roku i pozwoliłoby uniknąć scenariusza takiego:
źródło
- foo
na `` (tylko spacja, a nie "spacja i cała linia"). Zajęło mi trochę czasu, zanim zrozumiałem, że powinno to być „foo”.Oczywiście spóźniłem się na to, ale mimo wszystko chciałem wspomnieć dla porządku, że ten problem był omawiany w zeszłym roku na liście mailingowej git i wygląda na to, że od tego czasu niewiele się zmieniło.
Ten konkretny problem wynika z dzielenia i próby edycji tego samego kawałka. Analiza podstawowego problemu, jak pierwotnie opublikował Jeff King, jest zasadniczo taka:
Jeff kończy swój post bardzo pragmatycznym obejściem, które zawsze się udaje i dlatego jest wysoce zalecane:
Decydując się tylko na edycję porcji, która nie została wcześniej podzielona, nie będziesz musiał zajmować się numerami linii.
źródło
^M
w pliku diff. Po zapisaniu pliku z zakończeniami CR, interaktywna łatka edycji przeszła!Jeśli nie chcesz usuwać linii, która została przygotowana do usunięcia, jak w
gdzie chcesz zachować drugą linię, upewnij się, że zastąpiłeś
-
spacją, zamiast usuwać całą linię (tak jakbyś pozbył się dodanej linii). Git użyje linii jako kontekstu.źródło
Ważne jest również, aby poprawnie zmodyfikować nagłówek porcji (np
@@ -1,6 +1,9 @@
.). Joaquin Windmuller ujawnia sekret edycji nagłówka przystojniaka w jednym ze swoich postów na blogu .źródło
Niedawno po przeczytaniu tego wątku dowiedziałem się, jak przeprowadzić ręczną edycję.
Sztuczka, której użyłem, polegała na tym, że jeśli mam różnicę, taką jak:
Sztuczka polega na tym, aby całkowicie usunąć dwie linie, których nie chcę, tak aby wynikowa różnica wyglądała następująco:
Chociaż jest to najprawdopodobniej oczywiste dla większości ludzi, dopiero teraz byłem dla mnie i pomyślałem, że powinienem podzielić się swoim doświadczeniem. Proszę, powiedz mi, czy ta metoda stwarza jakiekolwiek zagrożenie.
źródło
+
na a' '
przez co najmniej godzinę.Możesz ręcznie edytować numery linii, co jest zdecydowanie przydatne w niektórych przypadkach. Jednak prawdopodobnie mógłbyś uniknąć tego konkretnego problemu, NIE dzieląc najpierw kawałka.
Jeśli zauważysz, że prawdopodobnie będziesz musiał edytować coś później w kawałku, który automatycznie wybrał Git, najlepiej po prostu edytować cały fragment, zamiast dzielić, umieszczać połowę, a następnie edytować drugą połowę. Git lepiej sobie z tym poradzi.
źródło
Doszedłem do tego pytania, szukając rozwiązania tego samego problemu, i nie mogłem wymyślić, jak zmienić numery linii (jak zasugerowano powyżej) w kawałku, aby git zaakceptował to w moim przypadku. Znalazłem jednak znacznie lepszy sposób, aby to zrobić, używając
git gui
. Tam możesz zaznaczyć linie w pliku różnicowym, które chcesz umieścić na scenie, a następnie kliknąć prawym przyciskiem myszy i wybrać opcję „Utwórz linie z zatwierdzenia”. Pamiętam, że git-cola też ma taką samą funkcjonalność.źródło
git-cola
wydaje się działać w systemach Linux, Windows i MacOS.Dodatkowym problemem, który miałem, gdy otrzymałem ten błąd, było to, że zakończenia linii zmieniły się, gdy zapisałem plik edycji.
Używałem systemu Windows i Notatnika do edycji (zapisuje tylko z zakończeniami linii Windows). Mój kod został napisany za pomocą Notepad ++ i skonfigurowałem go tak, aby miał zakończenia linii w stylu Unix / Linux.
Kiedy zmieniłem ustawienia, aby mieć Notepad ++ jako domyślny edytor git, mogłem wprowadzać zmiany w kawałku.
źródło
git config --global core.editor '"C:/Program\ Files\ \(x86\)/Notepad++/notepad++.exe"'
(dostosuj to w zależności od tego, gdzie na twoim komputerze jest zainstalowany program notepad ++)Jednym z powodów dziwnych komunikatów „Twój edytowany fragment nie ma zastosowania” (prawdopodobnie towarzyszy mu coś w rodzaju „błąd: fragment poprawki bez nagłówka w wierszu ...”) może być Twój edytor, jeśli jest skonfigurowany do usuwania końcowych białych znaków. Spowodowałoby to oczywiście poważne problemy, ponieważ łaty kodują puste wiersze jako wiersze z jedną spacją, którykolwiek fragment zawierający puste wiersze nie zostałby zastosowany, gdyby został zapisany za pomocą takiego edytora. W efekcie każdy fragment zawierający niezmienione puste wiersze nie zostanie zastosowany po edycji za pomocą, jeśli jest włączone usuwanie końcowych białych znaków.
źródło
FYI, otrzymywałem lekko powiązany błąd ... kiedy dodałem załatany zgodnie z sugerowaną instrukcją powyżej ... Jednak nie pokazywał żadnego błędu. Otrzymywałem to wielokrotnie, prosząc mnie o przygotowanie tego samego kawałka ... Zauważyłem, że korzystam ze starszej wersji Vima 7.4 ... Zaktualizowałem Vima i teraz działa zgodnie z oczekiwaniami. Mam nadzieję, że to komuś pomoże ...
źródło