Zmiana bazy to proces ponownego zastosowania zatwierdzeń w ramach kolejnej podróży bazowej. Służy do zastosowania sekwencji zatwierdzeń z różnych gałęzi do ostatecznego zatwierdzenia. Jest to alternatywa dla polecenia git merge. Jest to liniowy proces łączenia.
W Git termin rebase odnosi się do procesu przenoszenia lub łączenia sekwencji zatwierdzeń w nowe zatwierdzenie podstawowe. Rebazowanie jest bardzo korzystne i wizualizuje proces w środowisku przepływu pracy z rozgałęzianiem funkcji.
Dobrze jest zmienić bazę oddziału przed jego połączeniem.
Generalnie jest to alternatywa dla polecenia git merge. Scalanie jest zawsze rekordem zmieniającym się w przód. Dla porównania, rebase to atrakcyjne narzędzie do przepisywania historii w git. Łączy różne zatwierdzenia jeden po drugim.
Załóżmy, że dokonałeś trzech zatwierdzeń w gałęzi głównej i trzech w drugiej gałęzi o nazwie test. Jeśli to połączysz, wszystkie zatwierdzenia zostaną scalone na raz. Ale jeśli zmienisz bazę, zostanie ona scalona w sposób liniowy. Rozważ poniższy obraz:
Powyższy obrazek opisuje działanie git rebase. Trzy zatwierdzenia gałęzi głównej są łączone liniowo z zatwierdzeniami gałęzi testowej.
Scalanie jest najprostszym sposobem integracji oddziałów. Wykonuje trójstronne scalanie pomiędzy dwoma najnowszymi zatwierdzeniami gałęzi.
Jak dokonać ponownej bazy
Kiedy dokonałeś niektórych zatwierdzeń w gałęzi funkcji (gałąź testowa), a niektórych w gałęzi głównej. Możesz zmienić bazę dowolnej z tych gałęzi. Użyj polecenia git log, aby śledzić zmiany (historia zatwierdzeń). Przejdź do żądanej gałęzi, którą chcesz zmienić. Teraz wykonaj polecenie rebase w następujący sposób:
Składnia:
$git rebase
Jeśli w gałęzi występują konflikty, rozwiąż je i wykonaj poniższe polecenia, aby kontynuować zmiany:
$ git status
Służy do sprawdzania stanu,
$git rebase --continue
Powyższe polecenie służy do kontynuowania wprowadzonych zmian. Jeśli chcesz pominąć zmianę, możesz to zrobić w następujący sposób:
zdefiniuj komputer
$ git rebase --skip
Po zakończeniu ponownego bazowania. Wypchnij repozytorium do źródła. Rozważ poniższy przykład, aby zrozumieć polecenie git merge.
Załóżmy, że masz oddział test2 nad którym pracujesz. Jesteś teraz w gałęzi test2 i dokonałeś pewnych zmian w pliku projektu nowy plik1.txt .
Dodaj ten plik do repozytorium:
$ git add newfile1.txt
Teraz zatwierdź zmiany. Użyj poniższego polecenia:
$ git commit -m 'new commit for test2 branch.'
Dane wyjściowe będą wyglądać następująco:
[test2 a835504] new commitfor test2 branch 1 file changed, 1 insertion(+)
Zmień gałąź na master:
$ git checkout master
Wyjście:
Switched to branch 'master.' Your branch is up to date with 'origin/master.'
Teraz jesteś w gałęzi master. Dodałem zmiany do mojego pliku, mówi nowy plik.txt . Poniższe polecenie służy do dodania pliku do repozytorium.
$ git add newfile.txt
Teraz zatwierdź plik zmian:
$ git commit -m ' new commit made on the master branch.'
Wyjście:
[master 7fe5e7a] new commit made on master 1 file changed, 1 insertion(+) HiMaNshU@HiMaNshU-PC MINGW64 ~/Desktop/GitExample2 (master)
Aby sprawdzić historię logów, wykonaj poniższe polecenie.
$ git log --oneline
Wyjście:
Jak widać w historii logów, w gałęzi master pojawiło się nowe zatwierdzenie. Jeśli chcę zmienić bazę mojej gałęzi test2, co powinienem zrobić? Zobacz poniższy scenariusz gałęzi rebase:
Oddział Rebase
Jeśli mamy wiele zatwierdzeń z różnych gałęzi i chcemy połączyć je w jedno. Aby to zrobić, mamy dwie możliwości: połączyć go lub zmienić bazę. Dobrze jest przebudować swoją gałąź.
Z powyższego przykładu zobowiązaliśmy się do gałęzi master i chcemy ją ponownie oprzeć na gałęzi test2. Zobaczmy poniższe polecenia:
np zera
$ git checkout test2
To polecenie przełączy Cię na gałąź test2 z gałęzi głównej.
Wyjście:
Switched to branch 'test2.'
Teraz jesteś w gałęzi test2. Dlatego możesz zmienić bazę gałęzi test2 na gałąź master. Zobacz poniższe polecenie:
$ git rebase master
To polecenie zmieni bazę gałęzi test2 i wyświetli się jako Stosowanie: nowe zatwierdzenie w gałęzi test2 . Rozważ poniższe dane wyjściowe:
Wyjście:
Interaktywna baza danych Git
Git ułatwia to dzięki interaktywnemu Rebase; jest to potężne narzędzie, które umożliwia różne operacje, takie jak edytować, przepisywać, zmieniać kolejność, i więcej na temat istniejących zatwierdzeń. Interactive Rebase może być obsługiwany tylko na aktualnie sprawdzanej gałęzi. Dlatego ustaw lokalną gałąź HEAD na pasku bocznym.
Interaktywny rebase Git można wywołać za pomocą polecenia rebase, wystarczy wpisać -I wraz z poleceniem rebase. Tutaj ' I ' oznacza interaktywność. Składnia tego polecenia podana jest poniżej:
Składnia:
$ git rebase -i
Wyświetli listę wszystkich dostępnych opcji interaktywnych.
Wyjście:
Po danym wyjściu otworzy się edytor z dostępnymi opcjami. Rozważ poniższe dane wyjściowe:
Wyjście:
Gdy wykonamy polecenie git interaktywny rebase, otworzy się domyślny edytor tekstu z powyższymi wynikami.
Opcje, które zawiera, są wymienione poniżej:
- Wybierać
- Przeredagować
- Edytować
- Zdusić
- Naprawić
- Wykonawczy
- Przerwa
- Upuszczać
- Etykieta
- Resetowanie
- Łączyć
Powyższe opcje wykonują swoje specyficzne zadania za pomocą git-rebase. Przyjrzyjmy się pokrótce każdej z tych opcji.
Wybierz (-p):
Pick oznacza tutaj, że zatwierdzenie jest uwzględnione. Kolejność zatwierdzeń zależy od kolejności poleceń wyboru podczas zmiany bazy. Jeśli nie chcesz dodawać zatwierdzenia, musisz usunąć całą linię.
Słowo ponowne (-r):
ciąg do tablicy Java
Słowo reword jest dość podobne do polecenia pick. Opcja reword wstrzymała proces rebase i daje szansę na zmianę komunikatu zatwierdzenia. Nie ma to wpływu na żadne zmiany dokonane przez zatwierdzenie.
Edycja:
Opcja edycji umożliwia zmianę zatwierdzenia. Środki zmieniające, zatwierdzenia, można dodać lub całkowicie zmienić. Możemy także dokonać dodatkowych zatwierdzeń przed poleceniem rebasecontinue. Pozwala nam podzielić duże zatwierdzenie na mniejsze; ponadto możemy usunąć błędne zmiany dokonane w zatwierdzeniu.
Squash (-s):
Opcja squash pozwala połączyć dwa lub więcej zatwierdzeń w jedno zatwierdzenie. Pozwala nam także napisać nowy komunikat zatwierdzenia opisujący zmiany.
Naprawa (-f):
Jest to dość podobne do polecenia squash. Odrzucił wiadomość o zatwierdzeniu do połączenia. Do opisu obu zmian używany jest starszy komunikat zatwierdzenia.
Wykonanie (-x):
Opcja exec umożliwia uruchamianie dowolnych poleceń powłoki w przypadku zatwierdzenia.
Przerwa (-b):
Opcja break zatrzymuje zmianę bazy w prawidłowej pozycji. Będzie kontynuować zmianę bazy później za pomocą „ git rebase --kontynuuj ' Komenda.
Spadek d):
Opcja drop służy do usuwania zatwierdzenia.
Etykieta (-l):
Opcja etykiety służy do oznaczenia aktualnej pozycji głowy nazwą.
Zresetuj (-t):
Opcja resetowania służy do resetowania głowicy do etykiety.
polecenia git dla push
GitMerge kontra Rebase
Najczęstszym zagadkowym pytaniem dla użytkowników git jest to, kiedy używać polecenia merge, a kiedy używać rebase. Obydwa polecenia są podobne i oba służą do łączenia zatwierdzeń dokonanych przez różne gałęzie repozytorium.
Zmiana bazy nie jest zalecana w gałęzi współdzielonej, ponieważ proces zmiany bazy spowoduje utworzenie niespójnych repozytoriów. W przypadku osób fizycznych zmiana bazy może być bardziej użyteczna niż łączenie. Jeśli chcesz zobaczyć pełną historię, powinieneś użyć scalania. Merge śledzi całą historię zatwierdzeń, podczas gdy rebase zapisuje nową.
Polecenia Git rebase są alternatywą dla git merge. Mają jednak kilka kluczowych różnic:
Połączenie Gita | Rebaza Gita |
---|---|
Łączenie tworzy ostateczne zatwierdzenie podczas łączenia. | Git rebase nie tworzy żadnego zatwierdzenia podczas zmiany bazy. |
Łączy wszystkie zatwierdzenia w jedno zatwierdzenie. | Tworzy liniową ścieżkę zatwierdzeń. |
Tworzy graficzną historię, która może być nieco skomplikowana do zrozumienia. | Tworzy linearną historię, którą można łatwo zrozumieć. |
Bezpieczne jest połączenie dwóch gałęzi. | Git „rebase” zajmuje się poważną operacją. |
Fuzję można przeprowadzić zarówno w oddziałach publicznych, jak i prywatnych. | Używanie rebasingu w gałęziach publicznych jest złym wyborem. |
Scalanie integruje zawartość gałęzi funkcji z gałęzią główną. Zatem gałąź główna ulega zmianie, a historia gałęzi funkcji pozostaje spójna. | Zmiana bazy gałęzi głównej może mieć wpływ na gałąź funkcji. |
Łączenie chroni historię. | Rebasing pisze historię na nowo. |
Git merge prezentuje wszystkie konflikty na raz. | Git rebase prezentuje konflikty jeden po drugim. |