W git, jak usunąć commit z jednej gałęzi i zastosować go do innej gałęzi?

Mam dwie gałęzie od master, każda dla innej funkcji, a następnie mam gałąź syntezy, która łączy te dwie. Zaangażowałem coś w gałąź syntezy, ale teraz widzę, że raczej zastosowałbym tę zmianę do jednej z gałęzi specyficznych dla tej funkcji. Czy jest jakiś sposób na zrobienie tego nieaplikowanego/apply gdzie indziej z Gitem?

 27
Author: prismofeverything, 2009-11-20

2 answers

Cherry-wybierz commit do gałęzi docelowej i zresetuj gałąź źródłową. Zakładając, że chcesz przenieść najnowszy commit z gałęzi source do gałęzi target, wykonaj:

git checkout target
git cherry-pick source
git checkout source
git reset --hard source^

Jeśli commit nie był ostatnim, musisz użyć git rebase -i zamiast ostatniego polecenia i wybrać konkretną nazwę commitu dla twojego cherry-pick.

 38
Author: P Shved,
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-11-20 23:00:20

Ogólnie, gdy zrobię coś takiego, zrobię to:

  1. Tworzenie odwrotnego pliku łaty przy użyciu git diff (np. git diff HEAD^ HEAD)
  2. Zastosuj tę odwrotną łatkę do gałęzi, z której chcę usunąć zmianę.
  3. Sprawdź gałąź, na której chcę zmienić
  4. Użyj git cherry-pick, Aby zastosować odpowiedni commit

Wierzę, że jest łatwiejszy sposób, ale wolę to, ponieważ używam (i pamiętam) poleceń diff/cherry-pick lepiej

 2
Author: Rob Di Marco,
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-11-20 23:00:44