Přeskočit na hlavní obsah

Posunování větví

Další metodou pro manipulaci s větvemi je posunutí větve. Používá se, pokud potřebujete posunout kořen větve na jiný commit. Stejně jako u merge ovlivňuje data, takže je zde riziko konfliktu.

Nejčastější použití je, pokud pracujete v pracovní větvi a v main větvi se objeví nový obsah, který potřebujete aktualizovat do své větve. Již jsme si řekli, že tuto situaci lze vyřešit i s mergem, ale posunutím větve nevytváří zbytečné zmatky v git grafu. Nevýhodou tohoto řešení je, že mění historii grafu.

Jak posunout větev

Posunutí větve se provádí pomocí příkazu git rebase. Dejme tomu, že pracujeme ve větvi feature/navigation a náš kolega pracuje ve větvi bugfix/gpio.

Nyní ale váš kolega mergne svůj bugfix do mainu. Vy pak zjistíte, že tento bugfix potřebujete ve své větvi.

Nyní tedy dává smysl větev feature/navigation posunout na nejnovější main commit. Rebase se dělá vždy z větve, kterou chcete posouvat.

Provedení rebasu

git rebase main
Successfully rebased and updated refs/heads/dev-git.

V tuto chvíli git graf vypadá takto:

Odeslání na server

V tuto chvíli se změny provedly pouze lokálně. Je tedy nutné je odeslat na server pomocí příkazu:

git push --force
Username for 'https://git.kmecko.cz': kratochvil@kmecko.cz
Password for 'https://kratochvil%40kmecko.cz@git.kmecko.cz':
warning: redirecting to https://git.kmecko.cz/internal/web.git/
Enumerating objects: 157, done.
Counting objects: 100% (157/157), done.
Delta compression using up to 12 threads
Compressing objects: 100% (116/116), done.
Writing objects: 100% (153/153), 164.57 KiB | 54.86 MiB/s, done.
Total 153 (delta 95), reused 68 (delta 28), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (95/95), completed with 4 local objects.
remote:
remote: View merge request for dev-git:
remote: https://git.kmecko.cz/internal/web/-/merge_requests/47
remote:
To https://git.kmecko.cz/internal/web
+ d276b41...1b58db8 dev-git -> dev-git (forced update)
Proč je nutný --force?

Tento parametr se používá, pokud přepisujete existující commity v repozitáři. A to přesně uděláte pomocí příkazu rebase. Vzhledem k tomu, že toto provádíte na pracovní větvi, jedná se o poměrně bezpečnou operaci.