- Git rebase
- Před rebasing
- Pravidelné rebase
- Interaktivní rebase
- Force-push
- Sloučit konflikty
Tento průvodce vám pomůže začít s rebasing, násilím tlačí, a fixingmerge konflikty lokálně.
před ponořením do tohoto dokumentu se ujistěte, že jste obeznámeni s použitímgit přes příkazový řádek.
git rebase
Rebasing je velmi běžná operace inGit., K dispozici jsou následující možnosti rebase:
- Regular rebase.
- interaktivní rebase.
Před rebasing
git rebase
přepíše commit historie. Může to být škodlivé pro to, aby to udělalopečené větve. Může způsobit složité a těžko řešitelné konflikty sloučení. Vtato případech, namísto rebasing své pobočky proti výchozí pobočky,zvažte, tahání to místo (git pull origin master
). Má podobný účinek, aniž by byla ohrožena práce vašich přispěvatelů.,je bezpečnější zálohovat větev před rebasing, aby ujistěte se, že nemáte loseany změny. Uvažujme například funkce branchcalled my-feature-branch
:
-
Otevřít své funkce pobočka v terminálu:
git checkout my-feature-branch
-
získat nové pobočky, z toho:
git checkout -b my-feature-branch-backup
-
Přejít zpět na původní pobočku:
git checkout my-feature-branch
Nyní můžete bezpečně rebase., Pokud se něco pokazí, můžete obnovit yourchanges resetování my-feature-branch
my-feature-branch-backup
:
Všimněte si, že pokud jste přidali změny my-feature-branch
po vytvoření záložní větev,ztratíte je, když resetování.
Regular rebase
s pravidelnou rebasou můžete aktualizovat větev funkcí pomocí defaultbranch (nebo jiné větve).To je důležitý krok pro rozvojové strategie založené na Git., Můžete si být jisti, že změny, které přidáváte do codebase, neporušují žádné existující změny přidané do cílové větve poté, co jste vytvořili featurebranch.,
For example, to update your branch my-feature-branch
with master
:
-
Fetch the latest changes from
master
:git fetch origin master
-
Checkout your feature branch:
git checkout my-feature-branch
-
Rebase it against
master
:git rebase origin/master
-
Force-push to your branch.,
Pokud jste rebase:
- Git dovoz všech zavazuje předložen
master
po themoment jste vytvořili tematickou větev až do současnosti. - Git staví se zavazuje máte ve vaší tematické větve na vrcholu všech zavazuje dovezené z
master
:
můžete nahradit master
s jinou větev, kterou chcete rebase proti, například, release-10-3
., Můžete také nahradit origin
s jinými remoterepositories, například upstream
. Chcete-li zkontrolovat, jaké dálkové ovladače jste propojili s místnímrepository, můžete spustit git remote -v
.
Pokud dojde ke konfliktům sloučení, git vás vyzve k fixthem před pokračováním rebase.
Chcete-li se dozvědět více, zkontrolujte dokumentaci Git o strategiích rebasingand rebasing.
Interactive rebase
interaktivní rebase můžete použít k úpravě revizí. Například změnit commitmessage, squash (připojit více commitů do jednoho), upravit nebo deletecommits., Použijte rebase pro změnu minulých zpráv o odevzdání a organizování historie odevzdání vaší větve, abyste ji udrželi v čistotě.
Když chcete něco změnit v posledních zavazuje, použít interactiverebase předáním vlajky --interactive
(nebo -i
) příkaz rebase.,
například, pokud chcete upravit poslední tři zavazuje ve vaší ratolest(HEAD~3
), běh:
git rebase -i HEAD~3
Git otevře poslední tři zavazuje ve vašem terminálu, textový editor a describesall interaktivní rebase možností, které můžete použít. Výchozí volba je pick
,která udržuje commit beze změny. Nahraďte Klíčové slovo pick
podleoperace, kterou chcete provést v každém odevzdání. Chcete-li to provést, musíte upravitdokáže v textovém editoru terminálu.,
například, pokud používáte Vim jako textový editor ina macOS je ZSH
shell a chcete squash všechny tři zavazuje(je spojit do jednoho):
- Stiskněte ion klávesnici přejít na Vim je editační režim.
- Navigace pomocí šipek na klávesnici pro editaci druhé spáchat keywordfrom
pick
squash
(nebos
). Udělejte totéž třetímu odevzdání.První odevzdání by mělo být ponecháno beze změny (pick
), protože chceme zmáčknout druhý a třetí do prvního., - stisknutím klávesy Escape opustíte režim úprav.
- typ
:wq
na „write“ (uložit) a „quit“. - Git výstupů, odevzdání zprávy, takže budete mít možnost upravit:
- Všechny řádky začínající
#
jsou ignorovány a nejsou zahrnuty v commitmessage. Všechno ostatní je zahrnuto. - Chcete-li jej ponechat tak, jak je, zadejte
:wq
. Chcete-li upravit zprávu odevzdání: přepněte do režimuediting, upravte zprávu odevzdání a uložte ji tak, jak jste právě provedli.,
- Všechny řádky začínající
- Pokud jste před opětovným spuštěním netlačili své commity na vzdálenou větev, stiskněte změny normálně. Pokud jste již tyto commity tlačili, místo toho tlačte silou.
Všimněte si, že kroky pro editaci prostřednictvím příkazového řádku může být jiný v závislosti na operačním systému a shellu, který používáte.
viz četné možnosti zpět v Gitfor hlubší pohled do interaktivního rebase.,
Force-push
Když provádíte složitější operace, například commity squash, reset orrebase vaší větve, musíte vynutit aktualizaci vzdálené větve.Tyto operace znamenají přepisování spáchat historii pobočky.Chcete-li vynutit aktualizaci, projít vlajky --force
nebo -f
push
příkaz. Forexample:
git push --force origin my-feature-branch
vynucení aktualizace se nedoporučuje při práci na sharedbranches.
Alternativně můžete místo toho předat příznak --force-with-lease
., To je bezpečnější, protože to nepřepíše jakékoli práce na remotebranch-li více zavazuje byly přidány do vzdálené pobočky někoho jiného:
git push --force-with-lease origin my-feature-branch
Pokud je větev, kterou chcete force-push je chráněno,nemůžete nutit-tlačit na to, pokud jste odemknout to první. Pak jej můžete zatlačit a znovu chránit.,
Sloučit konflikty
Jako Git je založena na porovnání verzí fileline-by-line, kdykoliv se linka změnila v oboru se shoduje s sameline změnil v cílové pobočky (po okamžiku, kdy jste vytvořili tematickou větev z něj), Gitidentifies tyto změny jako sloučení při konfliktu. Chcete-li to opravit, musíte si vybratkterá verze tohoto řádku chcete zachovat.
většina konfliktů lze vyřešit pomocí uživatelského rozhraní GitLab.
u složitějších případů existují různé metody jejich řešení. Existují také aplikace GIT GUI, které mohou pomocivizualizace rozdílů.,
opravit konflikty lokálně, můžete použít následující metodu:
-
Otevřít terminál a pokladna vaší tematické větve, například
my-feature-branch
:git checkout my-feature-branch
-
Rebase své pobočky proti cílovou pobočku tak Gitprompts s konflikty:
git rebase origin/master
- Otevřít konfliktní soubor v editoru kódu své preference.
- Podívejte se na konfliktní blok:
- začíná značkou:
<<<<<<< HEAD
., - Níže je obsah s vašimi změnami.
- značka:
=======
označuje konec vašich změn. - Níže je obsah nejnovějších změn v cílové větvi.
- značka
>>>>>>>
označuje konec konfliktu.
- začíná značkou:
- Upravit soubor: vyberte si, která verze (před nebo po
=======
), které chcete nechat, a pak odstranit část obsahu nechcete v souboru. - odstraňte značky.
- uložte soubor.,
- opakujte proces, pokud existují další konfliktní soubory.
-
Fázi změn:
git add .
-
potvrdit změny:
git commit -m "Fix merge conflicts"
-
Pokračovat rebasing:
git rebase --continue
cautionUp do tohoto bodu, můžete spustitgit rebase --abort
zastavit proces.Git přeruší rebase a vrátí pobočka státní jsi měl beforerunninggit rebase
.,Po spuštěnígit rebase --continue
rebase nelze přerušit. - Force-push do vzdálené větve.
Leave a Reply