Git i praca na wielu gałęziach

Mam kilka gałęzi Gita: 'experimental', 'something' I 'master'.

Przerzuciłem się na gałąź 'eksperymentalną'. Zauważyłem błąd, który nie jest związany z 'eksperymentalnym' i należy do zmian, które zostały wprowadzone w 'czymś'. Jak mam to naprawić?

Myślę, że powinienem przełączyć się na 'coś', naprawić błąd, zatwierdzić i wrócić do 'experimental'. Jak mam wziąć drobną zmianę z "czegoś" i zastosować ją zarówno do "master", jak i "experimental", aby nie musisz ponownie naprawiać błędu, gdy przełączam się do tych gałęzi?

Author: sawa, 2009-08-26

6 answers

Istnieją dwa rozwiązania, które nie zostały jeszcze wymienione: użyj gałęzi tematycznejlub użyj cherry-picking.


Topic branch solution

W rozwiązaniu topic branch przełącz się na gałąź 'coś', Utwórz gałąź, aby naprawić błąd np. 'coś-bugfix', połącz tę gałąź w 'coś' (naprawienie błędu), a następnie połącz tę gałąź w 'eksperymentalny'.

$ git checkout -b something-fix something
[edit, commit]
$ git checkout something
$ git merge something-fix
$ git checkout experimental
$ git merge something-fix
[fix conflicts if necessary and commit]

Zobacz także rozwiązywanie konfliktów/zależności między gałęzie tematyczne early i nigdy nie łączą się z powrotem , a być może również przenoszą się do innej gałęzi blogów Junio C Hamano (opiekun Gita).


Cherry-picking a bugfix

Rozwiązanie cherry-picking jest przydatne, jeśli zauważyłeś później , że stworzona przez Ciebie poprawka (np. w gałęzi deweloperskiej) będzie przydatna również w innych gałęziach (np. w gałęzi stabilnej). W Twoim przypadku możesz znaleźć rozwiązanie "czegoś" oddział:

$ git checkout something
[edit, edit, edit]
$ git commit
$ git checkout experimental

Wtedy zauważyłeś, że fix, który dodałeś do gałęzi 'something' powinien być również na gałęzi 'experimenta'. Powiedzmy, że ta poprawka to commit 'a' (np. 'something', jeśli nie zatwierdziłeś niczego na 'something', ale może to być np. ' something~2 'lub ' c84fb911'): {]}

$ git checkout experimental
$ git cherry-pick A

(możesz użyć opcji --edit do git cherry-pick jeśli chcesz edytować wiadomość zatwierdzającą przed wprowadzeniem poprawki błędów cherry-pick).

 53
Author: Jakub Narębski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-27 10:21:40

Możesz:

  • stash LUB commit Zmiany, nad którymi pracowałeś w gałęzi experimental
  • checkout something
  • (opcjonalnie) {[4] } aby znaleźć błąd
  • commit Zmiany
  • checkout experimental

A następnie:

  • rebase something jeśli chcesz mieć czysty wykres zmian (jeśli wystawiasz to repozytorium i ci na tym zależy)

Lub:

  • merge something jeśli nie zależy ci na "prezentacji":)
 5
Author: Carmine Paolino,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-26 11:30:41

Ponieważ twoja eksperymentalna gałąź ma cechy z coś powinieneś wykonać jedną z:

  • połącz coś w experimental po naprawieniu błędu.
  • rebase your experimental on top of something
 2
Author: Vitaly Kushner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-26 11:29:52

Jeśli nie robisz zbyt wielu postępów w 'master', po prostu przełącz się z powrotem na eksperymentalny i wykonaj 'Git merge master'. Jeśli tak, myślę, że polecenie "git cherry-pick" jest twoim przyjacielem.

 0
Author: ondra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-26 11:25:30

Twoje gałęzie są jakoś powiązane tak:

Master > something > experimental

To jest, jeśli naprawdę zamierzasz połączyć coś w mistrza.

Chciałbym, jeśli to możliwe, naprawić go na master, a następnie rebase innych NA master. Ale po prostu lubię rebasing. Albo możesz to tam naprawić, a następnie scalić dokładnie tak

Master > something > experimental

Ale jeśli coś jest prostą gałęzią tematyczną, nie zrobiłbym tego. Tutaj brzmi jak coś jest Twoim "kandydatem na następnego mistrza"

 0
Author: u0b34a0f6ae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-26 11:26:01

Jeśli możesz połączyć, zrób to. Jeśli nie chcesz scalić czegoś z innymi gałęziami, Napraw błąd i wybierz ten commit do każdej z pozostałych gałęzi.

 0
Author: William Pursell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-26 11:34:24