Zmień bieżącą gałąź Git na gałąź master
Mam repozytorium w Git. Zrobiłem gałąź, a następnie dokonałem pewnych zmian zarówno w Mistrzu, jak i w gałęzi.
Potem, dziesiątki commitów później, zdałem sobie sprawę, że gałąź jest w znacznie lepszym stanie niż master, więc chcę, aby gałąź "stała się" master i zlekceważyła zmiany na master.
Nie mogę go scalić, ponieważ nie chcę trzymać zmian na master. Co mam zrobić?
Extra: W tym przypadku "stary" mistrz został już push
- ed do innego repozytorium takie jak GitHub. Jak to wszystko zmienia?
13 answers
Problem z pozostałymi dwoma odpowiedziami polega na tym, że nowy mistrz nie ma starego mistrza jako przodka, więc kiedy go wciśniesz, wszyscy inni będą pomieszani. To jest to co chcesz zrobić:
git checkout better_branch
git merge --strategy=ours master # keep the content of this branch, but record a merge
git checkout master
git merge better_branch # fast-forward master up to the merge
Jeśli chcesz, aby Twoja historia była trochę jaśniejsza, zalecam dodanie pewnych informacji do komunikatu merge commit, aby wyjaśnić, co zrobiłeś. Zmień drugi wiersz na:
git merge --strategy=ours --no-commit master
git commit # add information to the template merge message
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
2010-05-04 06:00:07
Upewnij się, że wszystko jest przesyłane do zdalnego repozytorium (GitHub):
git checkout master
Zastąp "master" za pomocą "better_branch":
git reset --hard better_branch
Wymuś push do zdalnego repozytorium:
git push -f origin 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-01-09 19:35:00
Edit: [5] To wielka różnica.
Są dwa sposoby: "brudny" i "czysty". Załóżmy, że Twoja gałąź ma nazwęnew-master
. To jest czysty sposób:
git checkout new-master
git branch -m master old-master
git branch -m new-master master
# And don't do this part. Just don't. But if you want to...
# git branch -d --force old-master
Spowoduje to, że pliki konfiguracyjne zmienią się tak, aby pasowały do przemianowanych gałęzi.
Możesz również zrobić to w brudny sposób, co nie spowoduje aktualizacji plików konfiguracyjnych. To jest coś w rodzaju tego, co dzieje się pod maską powyższego...
mv -i .git/refs/new-master .git/refs/master
git checkout 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
2010-05-04 21:03:29
Zmień nazwę gałęzi na master
przez:
git branch -M branch_name 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
2010-05-04 05:37:19
Podane tutaj rozwiązania (zmiana nazwy gałęzi na 'master') nie nalegają na konsekwencje dla Remote (GitHub) repo:
- Jeśli nie naciskałeś niczego od czasu tworzenia tej gałęzi, możesz zmienić jej nazwę i wcisnąć ją bez żadnego problemu.
- Jeśli miałeś push master na Githubie, będziesz musiał 'git push-f' nową gałąź: nie możesz już naciskać w trybie fast forward .
-f --force
Zazwyczaj polecenie odmawia aktualizacji zdalnego ref, który nie jest przodek lokalnego ref, którego użyto do nadpisania. Ta flaga wyłącza czek. Może to spowodować utratę commitów przez zdalne repozytorium; używaj go ostrożnie.
Jeśli inni już wyciągnęli Twoje repo, nie będą w stanie wyciągnąć nowej historii master bez zastąpienia własnego master nową gałęzią Master GitHub (lub radzenia sobie z wieloma połączeniami).
Istniejealternatywa dla git push --force dla Public repos .
odpowiedź Jefromi (łączenie prawej zmiany z powrotem do oryginalnego master) jest jednym z nich.
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-05-23 12:26:38
Z tego, co rozumiem, możesz rozgałęziać bieżącą gałąź na istniejącą gałąź. W istocie, to nadpisze master
z tym, co masz w bieżącej gałęzi:
git branch -f master HEAD
Gdy już to zrobisz, możesz normalnie wcisnąć lokalną gałąź master
, prawdopodobnie wymagając parametru force tutaj również:
git push -f origin master
Brak połączeń, brak długich poleceń. Po prostu branch
i push
- ale tak, to zmieni historię gałęzi master
, więc jeśli pracujesz w zespole, możesz muszę wiedzieć, co robisz.
Alternatywnie odkryłem, że możesz wcisnąć dowolną gałąź do dowolnej zdalnej gałęzi, więc:
# This will force push the current branch to the remote master
git push -f origin HEAD:master
# Switch current branch to master
git checkout master
# Reset the local master branch to what's on the remote
git reset --hard origin/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-08 11:41:22
Można również wypisać wszystkie pliki z drugiej gałęzi do master:
git checkout master
git checkout better_branch -- .
A następnie zatwierdź wszystkie zmiany.
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-02-17 10:12:24
Uznałem, że ta prosta metoda działa najlepiej. Nie przepisuje historii i wszystkie poprzednie check-iny gałęzi zostaną dołączone do master. Nic nie zostało utracone i możesz wyraźnie zobaczyć, co się wydarzyło w dzienniku zmian.
Cel: uczynić obecny stan "gałęzi ""master"
Pracując nad gałęzią, zatwierdzaj i wypychaj zmiany, aby upewnić się, że lokalne i zdalne repozytoria są aktualne:
git checkout master # Set local repository to master
git reset --hard branch # Force working tree and index to branch
git push origin master # Update remote repository
Po tym, twój Pan będzie dokładny stan twój ostatni commit branch i twój główny dziennik commitów pokażą wszystkie check-iny branch.
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-22 09:02:44
Aby dodać do odpowiedzi Jefromi, jeśli nie chcesz umieszczać nic nie znaczącego scalenia w historii gałęzi source
, możesz utworzyć tymczasową gałąź dla ours
scalania, a następnie wyrzucić ją:
git checkout <source>
git checkout -b temp # temporary branch for merge
git merge -s ours <target> # create merge commit with contents of <source>
git checkout <target> # fast forward <target> to merge commit
git merge temp # ...
git branch -d temp # throw temporary branch away
W ten sposób commit merge będzie istniał tylko w historii gałęzi target
.
Alternatywnie, jeśli nie chcesz tworzyć scalenia, możesz po prostu pobrać zawartość {[2] } i użyć ich do nowego commita na target
:
git checkout <source> # fill index with contents of <source>
git symbolic-ref HEAD <target> # tell git we're committing on <target>
git commit -m "Setting contents to <source>" # make an ordinary commit with the contents of <source>
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-08-08 10:29:53
Znalazłem odpowiedź, którą chciałem w poście na bloguZastąp gałąź master inną gałąź w git:
git checkout feature_branch
git merge -s ours --no-commit master
git commit # Add a message regarding the replacement that you just did
git checkout master
git merge feature_branch
Jest zasadniczo taka sama jak Cascabel ' s answer . Poza tym ,że" opcja " dodał poniżej jego rozwiązanie jest już osadzone w moim głównym bloku kodu.
Łatwiej jest znaleźć taki sposób.Dodaję to jako nową odpowiedź, ponieważ jeśli będę potrzebował tego rozwiązania później, chcę mieć Wszystkie kod I zamierzam użyć w jednym bloku kodu.
W przeciwnym razie mogę kopiować-wklejać, następnie przeczytaj szczegóły poniżej, aby zobaczyć linię, którą ja powinienem zmienić - po tym, jak już go wykonałem.
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
2018-08-19 18:14:09
Mój sposób robienia rzeczy jest następujący
#Backup branch
git checkout -b master_backup
git push origin master_backup
git checkout master
#Hard Reset master branch to the last common commit
git reset --hard e8c8597
#Merge
git merge develop
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
2018-07-12 10:09:14
Jeśli używasz eGit w Eclipse :
- Kliknij prawym przyciskiem myszy węzeł projektu.
- Wybierz Team → następnie Advanced → następnie Zmień nazwę gałęzi
- następnie rozwiń folder remote tracking .
- Wybierz gałąź o niewłaściwej nazwie, a następnie kliknij przycisk Zmień nazwę, Zmień nazwę na dowolną nową nazwę.
- wybierz nowy master, a następnie zmień jego nazwę NA 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
2018-08-19 18:15:36
Następujące kroki są wykonywane w przeglądarce Git obsługiwanej przez Atlassian (Bitbucket server)
Tworzenie {current-branch} jako master
- Utwórz gałąź z {[0] } i nazwij ją "Master-duplicate".
- Utwórz gałąź z {current-branch} i nazwij ją "{current-branch} - copy".
- w ustawieniu repozytorium (Bitbucket) Zmień "domyślną gałąź" na "Master-duplicate" (bez tego kroku nie będziesz mógł usunąć master - "W następnym step").
- Usuń gałąź "master" - zrobiłem ten krok z drzewa źródłowego (możesz to zrobić z przeglądarki CLI lub Git)
- Zmień nazwę" {current-branch} "na" master "i wypchnij do repozytorium (spowoduje to utworzenie nowej gałęzi "master " nadal" {current-branch} " będzie istnieć).
- w Ustawieniach repozytorium Zmień " domyślną gałąź "na"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
2018-08-19 18:12:06