Mam dwa zatwierdzenia w tej samej gałęzi, jedna po drugiej. Dodałem zmiany do pliku A do pierwszego zatwierdzenia, a następnie wprowadziłem pewne zmiany do innych plików, a następnie dokonałem kolejnego zatwierdzenia. Teraz chcę, żeby zmiany w pliku A były na drugim zatwierdzeniu, a nie na pierwszym. Jaki jest najbardziej elegancki sposób?Jak przenieść zmiany z jednego commitowania na drugi?
Odpowiedz
Jeśli są małe zobowiązuje, i zobowiązuje się zawsze powinny być małe w git, najprostszym sposobem jest git reset HEAD^^
a potem po prostu zrobić je ponownie. Zauważ, że każde rozwiązanie tego problemu wymaga przepisania historii, a jeśli już gdzieś wypchnąłeś te poprawki, nie powinieneś tego robić, jeśli nie wiesz, co robisz.
"i zatwierdzenia powinny zawsze być małe w git" Pewnie ... – Betamos
Bardzo zaangażowana odpowiedź, ale w zasadzie to Squash i Rebase.
Zobacz tutaj: http://davidwalsh.name/squash-commits-git
W prawdopodobnie mało prawdopodobnym zdarzeniu, w którym zostały utworzone te zatwierdzenia, cofnij drugie zatwierdzenie za pomocą git reset HEAD^
, a następnie dodaj zmiany do pierwszego zatwierdzenia z git commit --amend
.
W bardziej prawdopodobnym zdarzeniu, w którym nastąpiło przeniesienie, a zatwierdzenia były w pewnym momencie w przeszłości, najlepszym rozwiązaniem jest ponowne przesyłanie. Nie znając dokładnej sytuacji, najlepiej jest powołać się na odwołanie, które wyjaśnia to dobrze.
Zarówno w pierwszym, jak i drugim wydarzeniu rozdział książki Pro Git o historii przepisywania dobrze wyjaśnia opcje - zarówno wtedy, gdy powinny być używane, jak i wtedy, gdy należy zachować ostrożność.
napisałem skrypt do osiągnięcia tego celu. Możesz go wypiąć here.
Używanie skryptu byłoby tak proste, jak:
mv-changes HEAD~ HEAD fileA
Innym rozwiązaniem tego problemu
- Znajdź popełnić tuż przed dwoma zatwierdzeń (prawdopodobnie jest to gałąź master)
- Wykonaj
git rebase -i <commit before commits to be reordered>
(git rebase -i master
w większości przypadków) - W edytorze tekstu zamień kolejność zatwierdzeń (dla vima użyj sekwencji ence
ddp
podczas gdy na linii, które powinny poruszać się w dół) - Zapisz, zamknij i niech git rebase zrobić resztę
- 1. Skopiuj plik z jednego serwera na drugi
- 2. Jak skopiować plik z jednego serwera na drugi?
- 3. Jak przenieść lokalne repozytorium git z jednego hdd na inny?
- 4. Java: Przenieś projekt Eclipse z jednego komputera na drugi?
- 5. Kopiowanie z jednego pliku xml na drugi - powershell
- 6. Jaki jest najszybszy i najbezpieczniejszy sposób przenoszenia repozytorium SVN z jednego hosta na drugi?
- 7. Jak przenieść dwa 32-bitowe rejestry do jednego 64-bitowego?
- 8. Bash: Jak przenieść całą zawartość folderu do jednego poziomu?
- 9. Jak przenieść WM na Wayland?
- 10. Jak przenieść element na NSMutableArray?
- 11. Kopiowanie z jednego rejestru na inny
- 12. Git: przenieść zmiany między gałęziami bez pracy zmiana katalogu
- 13. Jak przenieść GitLab na nowy serwer?
- 14. Czy mogę wykryć ruch okna przeglądarki z jednego ekranu na drugi w JavaScript?
- 15. Jak przenieść DialogFragment z centrum?
- 16. Skomentuj linię w Github bez commitowania?
- 17. Przenieść konstruktora na zniszczony obiekt?
- 18. Przenieść pozycję na liście?
- 19. Czy mogę przenieść aplikację Windows Phone i Windows 8 z jednego konta na drugie?
- 20. Jak skopiować z jednego płótna na drugie
- 21. Jak przenieść istniejącą pracę z jednego widoku do drugiego w Jenkins?
- 22. Jak przenieść/skopiować plik z jednego folderu do innego folderu w Androidzie za pomocą phonegap?
- 23. Jak przenieść odniesienia sieciowe z jednego projektu do drugiego w VS2010?
- 24. Jak znaleźć drugi ostatni element z listy?
- 25. Jak uzyskać drugi mecz z QuerySelector?
- 26. jak przenieść osie na środek wykresu?
- 27. Jak przenieść uiview na trajektorii koła?
- 28. Jak przenieść wiersze tabeli mysql na kolumny
- 29. Jak przenieść grę blendera na Androida
- 30. Jak przenieść operację na stos cofania Excel?
można sprawdzić git rebase [tutaj] (https://git-scm.com/docs/git-rebase # _splitting_commits) – rumman0786
To pytanie jest specjalnym przypadkiem "Squasha, który mój ostatni X popełnia razem używając Gita" https://stackoverflow.com/questions/5189560/squash-my-last-x-commits-together-using -git –