Autor | Zpráva | ||
---|---|---|---|
joe Profil |
#1 · Zasláno: 1. 4. 2015, 16:31:01
Ahoj,
poradil by mi někdo, jak se řeší v Gitu vrácení změn zpátky? Situace: Přišel požadavek na úpravu, z masteru (živá verze) se vytvořila nová větev (ukol), kde vzniklo třeba 10 commitů. Po schválení se změny nasadily (merge ukol do master). Ve větvi master vznikly další commity nesouvisející s úpravou. Teď je na čase odebrat změny a vrátit je zpět (z master odebrat všechny změny ve větvi ukol). Jak to řešit? :-) Hledám nějaké optimální řešení, snadný postup, atp. Díky za tip. |
||
juriad Profil |
#2 · Zasláno: 1. 4. 2015, 16:56:33
git rebase -i <číslo commitu odkdy> .
Pak si můžeš vybrat co s jednotlivými commity provést. Pozor toto přepíše celou historii větve od zmíněného commitu. |
||
Jan Tvrdík Profil |
#3 · Zasláno: 1. 4. 2015, 18:26:40
joe:
Já to nechápu, proč chceš zrušit ty commity ve větvi ukol ?
|
||
joe Profil |
#4 · Zasláno: 1. 4. 2015, 20:24:39
Commity vyloženě rušit nechci. Chci vrátit stav, chci tam ty staré commity samozřejmě nechat, měnit historii Gitu nechci, navazují na ně další větve.
Zkusím to lépe napsat :) Na produkci se mají nasadit změny, které budou viditelné jen týden. Pak se musí dát z produkce pryč (a třeba rovnou zahodit). Do masteru se dá větev ukol (obsahuje třeba 10 commitů). Ve větvi master přibydou další commity. Po týdnu chci dát úpravy z větve ukol pryč (commity přidané po nasazení větve ukol chci samozřejmě ponechat :-))
To mám postupovat tak, že na každý commit vytvořený ve větvi ukol dám revert a pojedu od nejnovějších po nejstarší?
Potřebuji udělat tedy něco jako revert branch, ne revert commit. |
||
Keeehi Profil |
#5 · Zasláno: 1. 4. 2015, 20:59:23
Napadá mě vytvořit novou větev z commitu těsně před tím, než byl proveden merge s tou dočasnou větví. To té nové větve překopírovat ty nové commity co příšli po mergi (git cherry-pick) a nakonec z ní udělat master.
|
||
joe Profil |
#6 · Zasláno: 1. 4. 2015, 21:09:05
Keeehi:
Těch nových commitů je třeba 50 :-) Teď je to relativně dobré, pokud v té větvi, kterou chci "odebrat" je do cca 10 commitů, co kdyby tam ale bylo commitů 30 nebo daleko víc? To můžu pak řešit klidně celý den... |
||
Keeehi Profil |
#7 · Zasláno: 1. 4. 2015, 22:07:11
To že jsem napsal překopírovat neznamená, že to budeš ručně modifikovat souboy tak, aby to odpovídlo novým commitům. Stačí si jen vybrat commity které chceš a pomocí cherry-pick se automaticky nakopírují do nové větve. Samozřejmě větší problémy vznikají když při souběžném vývoji ve více větvích vytvoříš konflikty.
|
||
Jan Tvrdík Profil |
Zkoušel si revertnout ten merge commit?
Viz http://stackoverflow.com/questions/7099833/how-to-revert-a-merge-commit-thats-already-pushed-to-remote-branch |
||
joe Profil |
#9 · Zasláno: 3. 4. 2015, 14:13:31
Jan Tvrdík:
Prozkoumal jsem situaci a vypadá to, že před nasazením nedošlo ke změnám, takže tam žádný merge commit nevidím :( |
||
Jan Tvrdík Profil |
#10 · Zasláno: 3. 4. 2015, 18:19:45
joe:
Tak příště použij git merge --no-ff a následně můžeš revertnout ten merge commit.
|
||
joe Profil |
#11 · Zasláno: 3. 4. 2015, 22:12:17
Jan Tvrdík:
Nevím co ten příkaz znamená, ale podívám se na to a určitě se to bude hodit, díky moc :-) přes příkazovou řádku moc nemerguju, spíš přes GUI - SourceTree / GitExtensions. |
||
Jan Tvrdík Profil |
#12 · Zasláno: 3. 4. 2015, 23:43:16
joe:
Jinak koukám, že ještě nikdo nezmínil, že revert umí vracet i více commitů, viz druhý příklad v dokumentaci. Ale revertovat celý merge bude většinou jednodušší řešení.
|
||
Časová prodleva: 9 let
|
0