Jak połączyć bieżącą gałąź z inną gałąź
Mam dwie gałęzie: master i dev. Zawsze pracuję nad dev i sprawdzam kod do gałęzi master dopiero po zatwierdzeniu go do użytku produkcyjnego. Kiedy to robię, muszę zrobić co następuje:
git checkout master
git merge dev
git checkout dev
To strasznie gadatliwe, a ponieważ robię to często, chciałbym to zminimalizować. Czy jest jakakolwiek Komenda git, której mogę użyć do scalenia z aktualnej gałęzi dev do innej gałęzi master bez konieczności wpierw kasowania gałęzi master? Coś może w stylu:
git merge dev to master
Byłoby Super. Przejrzałem dokumentację Gita i nic nie widziałem.
7 answers
1. Dodaj zdalny alias dla lokalnego repozytorium, np:
git remote add self file:///path/to/your/repository
(lub w windows git remote add self C:\path\to\your\repository
)
2. Push to the self remote, ex:
git push self dev:master
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
2017-10-04 17:57:44
Obecna najczęściej głosowana odpowiedź przez @ zerome jest dobra, ale jest trochę niepotrzebnie gadatliwa.
W bazie Twojego Git repo możesz po prostu zrobić to: git push . dev:master
Bardziej uogólnionym rozwiązaniem, które działałoby gdziekolwiek w drzewie byłoby:
git push $(git rev-parse --show-toplevel) dev:master
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
2014-10-03 02:46:41
Najlepiej byłoby użyć aliasu, umieszczonego w Twoim globalnym gitconfig (~/.gitconfig
):
[alias]
merge-to = "!f() { git checkout $1 && git merge $2 && git checkout -; }; f"
Tak, że można go wywołać z dowolnego repozytorium jako
git merge-to master dev
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
2015-10-06 22:30:16
Mała modyfikacja z aliasu Jefromi, która nie wymaga wpisywania w bieżącej gałęzi.
Więc używasz go jak: git merge-to dev
.
To przełączy się na gałąź dev
, połączy ją z CURRENT, a następnie przełączy się z powrotem.
Na przykład, zakładając, że jesteś na gałęzi master
, połączy master z dev i nadal będziesz na master.
Na pewno trafi do moich dotfiles :)
[alias]
merge-to = "!gitmergeto() { export tmp_branch=`git branch | grep '* ' | tr -d '* '` && git checkout $1 && git merge $tmp_branch && git checkout $tmp_branch; unset tmp_branch; }; gitmergeto"
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
2011-10-18 03:08:47
To jest stare, ale...
Połączenie rozwiązań z @kevin-lyda i @dmytrii-nagirniak powyżej. Ten alias łączy bieżącą gałąź z podaną gałąź. Używa metody remotes with i używa komend git, aby uzyskać kontekst.
[alias]
merge-to = "!gitmergeto() { git push \"`git rev-parse --show-toplevel`\" `git rev-parse --abbrev-ref HEAD`:$1; } && gitmergeto"
Do użycia jak:
git merge-to other-branch-name
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
2016-03-03 19:44:02
Aby scalić bieżącą gałąź do innej gałęzi bez sprawdzania drugiej gałęzi:
Fast-forward merge
To naprawdę proste. Z definicji fast-forward merge oznacza po prostu, że wskaźnik gałęzi jest przesuwany do przodu w drzewie zatwierdzeń. Więc wszystko, co musisz zrobić, to symulować , że:git branch -f master dev
Zastrzeżenia: zakłada to, że
Zakłada to również, że tylko ty pracujesz nad repo i / lub wiesz, co robisz.master
wskazuje na commit, który jest również w gałęzidev
lub innej gałęzi. Jeśli nie, ryzykujesz tracę pracę! W przeciwieństwie dogit merge
, które utworzy commit scalający (lub złoży skargę), gdy przewijanie do przodu nie jest możliwe, ta metodapo cichu zmusza wskaźnik gałęzi do wskazywania innego commita.
Wskazówka: jeśli wykonałeś git fetch
i masz nowe commity w origin/master
, możesz przenieść gałąź master
bez sprawdzania używając:
git branch -f master origin/master
Merge przez merge commit
Nie zawsze jest to możliwe. Aby utworzyć commit scalający, musisz wykonać operację scalania. Aby wykonać operację scalania, powinieneś mieć commity w innej gałęzi, których nie ma w bieżącej gałęzi.Jeśli masz commity w gałęzi master
, które są , a nie w gałęzi dev
, możesz:
Nie jest to jednak tylko dowód na to, że możliwe jest połączenie z inną gałęzią bez wymeldowuję się. Jeśli chcesz używać go codziennie, prawdopodobnie chcesz utworzyć dla niego alias za pomocą przekierowania powłoki lub zrobić dla niego skrypt powłoki. Z drugiej strony, możesz również utworzyć skrypt powłoki dla krótszego procesu pokazanego w pytaniu.
git checkout -b temp
git merge --no-ff -e master
git branch -f master temp
git checkout dev
git branch -D temp
Explanation:
- Sprawdź tymczasową gałąź, która wskazuje na ten sam commit co bieżąca gałąź.
-
Połącz
master
z tymczasową gałęzią i uruchom edytor wiadomości commit. Jeśli chcesz Scal commit do wygląda tak, jakby połączyłeś gałąźdev
domaster
, edytuj ją z tego:Merge branch 'master' into temp
Do tego:
Merge branch 'dev'
Wskazówka: możesz użyć
-m "Merge branch 'dev'"
zamiast-e
, aby być szybszym. - zaktualizuje wskaźnik gałęzi
master
, aby wskazywał na commit merge. - Zobacz oddział
dev
. - Wymuś usunięcie tymczasowej gałęzi.
master
tylko po to, aby ponownie wprowadzić zmiany w rozwoju. Niektórzy mogą się tym nie przejmować, ale dla innych może to być ważne.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
2017-12-03 04:10:55
Wiele razy przychodzisz z gałęzi, do której chcesz połączyć bieżącą gałąź. W takim razie możesz zrobić:
git co - && git merge @{-1}
Na przykład:
git checkout somebranch // (while on master)
// add some commits
git co - && git merge @{-1} // will merge somebranch into master
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
2017-02-23 10:07:29