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)
--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.