Właśnie przeczytałem poprawianie pojedynczego pliku w poprzednim zatwierdzeniu w git, ale niestety zaakceptowane rozwiązanie „zmienia kolejność” zatwierdzeń, co nie jest tym, czego chcę. Oto moje pytanie:
Od czasu do czasu zauważam błąd w moim kodzie podczas pracy nad (niepowiązaną) funkcją. Szybko git blame
ujawnia, że błąd został wprowadzony kilka zatwierdzeń temu (robię dość dużo, więc zwykle nie jest to ostatnie zatwierdzenie, które wprowadziło błąd). W tym momencie zwykle robię to:
git stash # temporarily put my work aside
git rebase -i <bad_commit>~1 # rebase one step before the bad commit
# mark broken commit for editing
vim <affected_sources> # fix the bug
git add <affected_sources> # stage fixes
git commit -C <bad_commit> # commit fixes using same log message as before
git rebase --continue # base all later changes onto this
Jednak zdarza się to na tyle często, że powyższa sekwencja staje się irytująca. Zwłaszcza „interaktywna rebase” jest nudna. Czy jest jakiś skrót do powyższej sekwencji, który pozwala mi zmienić dowolne zatwierdzenie w przeszłości za pomocą wprowadzonych zmian? Doskonale zdaję sobie sprawę, że to zmienia historię, ale popełniam błędy tak często, że naprawdę chciałbym mieć coś takiego
vim <affected_sources> # fix bug
git add -p <affected_sources> # Mark my 'fixup' hungs for staging
git fixup <bad_commit> # amend the specified commit with staged changes,
# rebase any successors of bad commit on rewritten
# commit.
Może inteligentny skrypt, który może przepisać zmiany przy użyciu narzędzi hydraulicznych?
rebase -i
?
rebase --onto tmp bad-commit master
. Jak napisano, będzie próbował zastosować złe zatwierdzenie do stanu ustalonego zatwierdzenia.