Mam dwie gałęzie, master i dev. Zawsze pracuję nad programistą i sprawdzam kod w gałęzi master dopiero po zatwierdzeniu go do użytku produkcyjnego. Kiedy to robię, muszę wykonać następujące czynności:
git checkout master
git merge dev
git checkout dev
To okropnie gadatliwe, a ponieważ często to robię, chciałbym je zminimalizować. Czy jest jakieś polecenie git, którego mogę użyć do scalenia mojego obecnego dewelopera gałęzi z drugim głównym gałęzią bez konieczności wcześniejszego pobrania głównej gałęzi? Coś może jak:
git merge dev to master
byłoby wspaniale. Przejrzałem dokumentację git i nic nie zobaczyłem.
git
version-control
Chris
źródło
źródło
git stash
,git checkout master
,git merge dev
,git checkout dev
,git stash pop
.Odpowiedzi:
1. Dodaj zdalny alias do lokalnego repozytorium, np .:
(Lub w systemie Windows
git remote add self C:\path\to\your\repository
)2. Wciśnij do zdalnego pilota, np .:
źródło
/path/to/your/repository
jest to ścieżka do twojego drzewa roboczego, tzn. Nie dołączaj.git
katalogu. Ponadto powinno to być oczywiste: pilot będzie musiał zostać zaktualizowany, jeśli przeniesiesz repo.git remote add self file:///c/projects
właśnie wraca z notami użytkowaniadev
), a następnie wcisnąć zatwierdzenie scalania za pomocągit push self dev:master
..
działało w porządku dla mniegit push . head:master
.Obecna najlepiej głosowana odpowiedź @zerome jest dobra, ale jest nieco niepotrzebnie gadatliwa.
W bazie repozytorium git możesz po prostu to zrobić:
git push . dev:master
Bardziej uogólnionym rozwiązaniem, które działałoby w dowolnym miejscu drzewa, byłoby:
źródło
git push . dev:master
bardzo uprościło mi życie! Jak dotąd najlepsza odpowiedź, dziękujęgit push origin dev:master
merge --no-ff
zachowania?git remote add self file:///myRepo
?Najlepszym rozwiązaniem byłoby użycie aliasu umieszczonego w globalnej gitconfig (
~/.gitconfig
):dzięki czemu można wywołać go z dowolnego repozytorium jako
źródło
&&
, nie;
, nie powiedzie się scalenie i nie spróbuję wrócić. Mamy nadzieję, że użytkownik jest wystarczająco inteligentny, aby zobaczyć komunikat „scalenie nie powiodło się” i sobie z tym poradzić.merge-to = "!f() { export tmp_branch=
gałąź git | grep '*' | tr -d „*”; git checkout $1 && echo git merge $tmp_branch && echo git checkout $tmp_branch; unset $tmp_branch; }; f"
, to niech ja nie trzeba wpisywać w branży Jestem obecnie na, więc jeśli chcę, aby scalićdev
domaster
i jestem wdev
tej chwili po prostu wpisaćgit merge-to master
merge-to = "!f() { export tmp_branch=`git branch | grep '* ' | tr -d '* '`; git checkout $1 && git merge $tmp_branch && git checkout $tmp_branch; unset $tmp_branch; }; f"
git branch | grep '* ' | tr -d '* '
; git realizacji transakcji $ 1 && git scalania --no-FF tmp_branch $ && $ tmp_branch git Zamówienie zamocowanej tmp_branch;}, f"Mała modyfikacja aliasu Jefromi, która nie wymaga wpisywania w bieżącej gałęzi.
Więc go używać jak:
git merge-to dev
.Spowoduje to przejście do
dev
oddziału, scalenie go z AKTUALNYM, a następnie nastąpi powrót.Na przykład, zakładając, że jesteś na
master
gałęzi, scali on mistrza z dev i nadal będziesz na nim.Zdecydowanie trafia do moich plików kropkowych :)
źródło
To jest stare, ale ...
Łącząc rozwiązania @ kevin-lyda i @ dmytrii-nagirniak powyżej. alias ten łączy bieżącą gałąź z określoną gałęzią. Używa metody pilotów i używa poleceń git, aby uzyskać kontekst.
Do użycia jak:
źródło
Aby scalić bieżącą gałąź z inną gałęzią bez sprawdzania innej gałęzi:
Scalanie do przodu
To jest naprawdę łatwe. Z definicji szybkie scalanie oznacza po prostu, że wskaźnik gałęzi jest przesuwany do przodu w drzewie zatwierdzeń. Wszystko, co musisz zrobić, to po prostu zasymulować, że:
Wskazówka: Jeśli zrobiłeś a
git fetch
i masz nowe zatwierdzeniaorigin/master
, możesz przenieśćmaster
gałąź bez wyewidencjonowywania za pomocą:Scal przez zatwierdzenie scalania
Nie zawsze jest to możliwe. Aby utworzyć zatwierdzenie scalania, musisz wykonać operację scalenia. Aby wykonać operację scalania, należy zatwierdzić zmiany w innym oddziale, które nie znajdują się w bieżącym oddziale.
Jeśli masz zatwierdzenia w
master
oddziale, których nie ma wdev
oddziale, możesz:Wyjaśnienie:
Połącz
master
się z gałęzią tymczasową i uruchom edytor komunikatów zatwierdzania. Jeśli chcesz, aby zatwierdzenie scalania wyglądało tak , jakby scaliłeśdev
gałąźmaster
, edytuj ją z tego:do tego:
Wskazówka: Możesz użyć
-m "Merge branch 'dev'"
zamiast-e
być szybszym.master
wskaźnik gałęzi, aby wskazywał na zatwierdzenie scalania.dev
oddział.To wciąż dotyka twojego działającego drzewa, ale minimalnie. Nie przywraca drzewa do stanu oryginalnego,
master
aby ponownie wprowadzić zmiany w rozwoju. Niektórym może to nie przeszkadzać, ale dla innych może być ważne.źródło
Wiele razy wychodzisz z gałęzi, w której chciałbyś połączyć obecną gałąź. W takim przypadku możesz zrobić:
git co - && git merge @{-1}
na przykład:
źródło
Moje rozwiązanie jest podobne do innych odpowiedzi, z następującymi różnicami:
set -ex
więc każde polecenie jest drukowane, a jeśli polecenie się nie powiedzie, funkcja natychmiast się kończygit merge
: git merge
które zapewnia, że uzupełnianie tabulatorami działa z niektórymi ustawieniami powłoki (np.gitfast
z oh-my-zsh)źródło