Git - edytowanie oraz usuwanie commitów

Git - edytowanie oraz usuwanie commitów
tBane
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 539
0

Witam.
Chciałbym uporządkować commity na swoim Git'cie. Potrzebuję edytować oraz usuwać wybrane commity ale jednocześnie nie usuwać plików. Jak to zrobić krok po kroku?

PR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 225
1

Hasła których szukasz to: squash, amend, ewentualnie push z forcem :D

Bardzo przyjemnie robi się to z poziomu IDE np. IntelliJ

tBane
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Poznań
  • Postów: 539
0
Kopiuj
git log --oneline
git rebase -i HEAD~10
wpisać nowy commit
:wq
git push --force

Jeżeli nie chce działać edytor po git rebase -i HEAD~10 to trzeba użyć:

Kopiuj
git rebase --abort

Jeżeli edytor zadziała to zmieniamy "pick" na "squash" w commitach, które chcemy scalić. Potem by zatwierdzić wciskamy ESC : wq ENTER Wtedy jeszcze pushujemy git push --force. I powinno wszystko dzialać.

superdurszlak
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 2002
0
tBane napisał(a):
Kopiuj
git log --oneline
git rebase -i HEAD~10

Ogólnie robię podobnie, choć raczej z rebase względem base brancha, żeby przy okazji zachować liniową historię commitów. Ewentualnie względem commit SHA z którego wyszedłem, jeśli liniowa historia nie jest jakoś specjalnie lubiana przez zespół, a chcę sobie po coś posprzątać.

Ale w tym drugim przypadku najczęściej nie chce mi się robić tego ręcznie, po prostu po wystawieniu i zaakceptowaniu PR robię merge ze squash zamiast zwykłego, i piszę jeden commit message, lub konfiguruję repozytorium by domyślnym commit message były tytuł i opis PR.

WeiXiao
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5226
0

A co z np.

git reset --soft HEAD~5

gdzie 5 to liczba commitów do tyłu?

superdurszlak
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 2002
0
WeiXiao napisał(a):

A co z np.

git reset --soft HEAD~5

gdzie 5 to liczba commitów do tyłu?

No zadziała mniej więcej tak samo, jak gdyby po prostu chciał zrobić squash, przy czym musisz osobno puścić commit. No i jeśli to jednak nie ma być squash tylko interactive rebase do mniejszej liczby commitów / przepisywanie commitów, no to odpada.

Chociaż mi się jakoś nigdy nie chce mieć >1 commita po merge, więc równie dobrze....

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.