W ciągu ostatniej godziny zmodyfikowałem pliki
A
ATest
B
BTest
Aby upewnić się, że moje komunikaty dotyczące zmian są zgodne z rzeczywistą zmianą, zatwierdzone A
z opisem. Niestety nie uwzględniłem ATest
tego zobowiązania.
Tymczasem nadal nie są zaangażowane B
i BTest
.
Jaki jest najlepszy sposób postępowania w tym momencie? Chciałbym:
- Cofnąć poprzednie zatwierdzenie bez wpływu na moje aktualnie niezatwierdzone pliki?
- Dodać kolejny plik o tym samym opisie do poprzedniego zatwierdzenia?
Odpowiedzi:
Aby dodać nowy plik do poprzedniego zatwierdzenia:
Możesz użyć,
git commit --amend --no-edit
jeśli nie chcesz zmieniać komunikatu o zatwierdzeniu.źródło
git rebase -i
do zmiany kolejności zatwierdzeń i scalenia zatwierdzenie nowego pliku z innym zatwierdzeniem. To może być istotne dla osobnego pytania.git rebase -i
tak, jak sugeruje @DavidZ, wszystko, co musisz zrobić, to przesunąć nowy zatwierdzenie nieco poniżej tego, z którym chcesz go połączyć, i zmienić słowo nowego zatwierdzenia nasquash
zamiastpick
git reset
), Następnie przygotuj ten, który chcesz dodać, zmień zatwierdzenie, a następnie ponownie przygotuj wszystkie pliki.Oto zabawny schemat blokowy 1, który jest również zaskakująco przydatny: podaje prawidłowe zalecenia zarówno dla pierwotnego pytania, jak i dla poprawionego „A co, jeśli nie było to ostatnie zatwierdzenie?” pytanie.
1 Zaczerpnięte z http://justinhileman.info/article/git-pretty/
źródło
Dodaj plik do poprzedniego zatwierdzenia
Jeśli już wypchnąłeś gałąź, nad którą pracujesz, najpierw zapoznaj się ze stronami podręcznika . W szczególności proszę zwrócić uwagę:
Jeśli jednak nie przepchnąłeś swojej gałęzi, przygotuj się na wejście w niebezpieczną strefę .
Znajdź skrót zatwierdzenia
Po pierwsze, musisz znać skrót zatwierdzenia zatwierdzenia, do którego chcesz dodać. Pokazuje to
git log
. W rzeczywistości chcesz określić zatwierdzenie przed tym, do którego chcesz dodać. (Możesz myśleć o tym jako o indeksie początkowym fragmentu zatwierdzeń, które chcesz zmienić). Możesz upewnić się, że masz właściwy zatwierdzenie, uruchamiającgit log -1 HEAD~n
. Gdzie „n” jest liczbą całkowitą, którą zwiększasz, aż uzyskasz właściwy zatwierdzenie. Albo możesz liczyć, naprawdę nie.Ale jeśli liczysz, przynajmniej potwierdź, że masz właściwe zobowiązanie z
git log -1 HEAD~5
lub cokolwiek to było. NIE powinieneś widzieć zatwierdzenia, do którego chcesz dodać.NIEBEZPIECZEŃSTWO , heh
Teraz jesteś gotowy do biegu
git rebase -i HEAD~5
. Albo czymkolwiek jest twój hash. Spowoduje to wyświetlenie ulubionego edytora tekstu i pliku do edycji. Plik jest listą zadań do wykonania dla polecenia rebase. Komentarze w pliku informują o dostępnych opcjach. Po prostu znajdź wiersz z zatwierdzeniem, do którego chcesz dodać, iw tym wierszu zmień „wybierz” na „edytuj”. Teraz zapisz i zamknij plik.Rebase zatrzyma się, gdy osiągnie zatwierdzenie, które kazałeś mu edytować. Uruchom a,
git status
aby zobaczyć dodatkowe informacje, które zawiera. Umieść swoje pliki na scenie, aby dodać je do zatwierdzenia za pomocągit add .
lub jakichkolwiek innych nazw plików.Następnie zrób
git commit --amend
. Zmieni to zatwierdzenie, które wybrałeś do edycji.Wreszcie biegnij
git rebase --continue
.Jeśli masz wątpliwości, w systemie Linux możesz dowiedzieć się więcej, czytając dokumentację wyjściową
man git-rebase
lubgit --help rebase
.źródło
git log
aby znaleźć swoje zatwierdzenie i skopiuj jego hash, a następnie użyj,git rebase -i hash^
aby ponownie bazować na zatwierdzeniu poprzedzającym twoje.