Jak zastąpić master branch w Git, całkowicie, z innej gałęzi? [duplikat]

Możliwy duplikat:
Zmień bieżącą gałąź Git na gałąź master

Mam dwie gałęzie w repozytorium Git:

  1. master
  2. seotweaks (utworzony pierwotnie z master)

Stworzyłem seotweaks z zamiarem szybkiego połączenia go z powrotem do master. Jednak to było trzy miesiące temu i kod w tej gałęzi jest 13 wersji przed master.

[11]} skutecznie stał się naszym mistrzem pracy branch, ponieważ cały kod w master jest teraz mniej lub bardziej przestarzały.

Bardzo zła praktyka, którą znam, nauczka.

Czy wiesz, jak mogę zastąpić całą zawartość master gałęzi tymi w seotweaks?

Mógłbym po prostu usunąć wszystko w master i połączyć, ale to nie jest najlepsza praktyka.

Author: Peter Mortensen, 2010-05-19

5 answers

Powinieneś być w stanie użyć "naszej" strategii scalania, aby nadpisać master za pomocą seotweaks w następujący sposób:

git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks

Wynik powinien być twój mistrz jest teraz zasadniczo seotweaks.

(-s ours jest skrótem od --strategy=ours)

From the docs about the' ours ' strategy:

To rozwiązuje dowolną liczbę głowic, ale wynikowym drzewem scalania jest zawsze drzewo bieżącej głowicy gałęzi, skutecznie ignorując wszystkie zmiany ze wszystkich innych gałęzi. Jest przeznaczony do służy do zastępowania starej historii rozwoju gałęzi bocznych. Zauważ, że różni się to od opcji-Xours do rekurencyjnej strategii scalania.

 2298
Author: ergosys,
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-21 15:47:28

Co powiesz na użycie Git branch-m, aby zmienić nazwę gałęzi master na inną, a następnie zmienić nazwę gałęzi seotweaks NA master? Coś takiego:

git branch -m master old-master
git branch -m seotweaks master
git push -f origin master

Może to spowodować usunięcie commitów w Origin master , sprawdź swój Origin master przed uruchomieniem git push -f origin master.

 383
Author: ZelluX,
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-10-31 17:34:42

Możesz zmienić nazwę / usunąć master na zdalnym, ale będzie to problem, jeśli Wiele osób oparło swoją pracę na zdalnej gałęzi master i wyciągnęło tę gałąź w lokalnym repo.
Tutaj może tak nie być, ponieważ wydaje się, że wszyscy pracują nad branchem ' seotweaks'.

W takim przypadku możesz:
git remote --show może nie działać. (Make a git remote show aby sprawdzić, jak zdalny jest zadeklarowany w lokalnym repo. Zakładam, że 'origin')
(Dotyczy Githuba, house9 komentarze: "musiałem zrobić jeden dodatkowy krok, kliknąć przycisk' Admin 'na Githubie i ustawić' Default Branch 'na coś innego niż' master', a następnie umieścić go z powrotem")

git branch -m master master-old  # rename master on local
git push origin :master          # delete master on remote
git push origin master-old       # create master-old on remote
git checkout -b master seotweaks # create a new local master on top of seotweaks
git push origin master           # create master on remote

Ale jeszcze raz:

    Jeśli użytkownik spróbuje ściągnąć, gdy master jest usuwany na pilocie, jego ściągnięcia nie powiodą się ("no such ref on remote").]}
  • gdy master zostanie odtworzony na zdalnym, pull spróbuje połączyć nowy master z lokalnym (teraz starym) master: wiele konfliktów. Oni w rzeczywistości muszą reset --hard ich lokalny master do gałęzi remote / master, którą pobierają, i zapomnieć o ich aktualnym master.
 61
Author: VonC,
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:34:51

Ponieważ seotweaks został pierwotnie utworzony jako gałąź z master, połączenie go z powrotem jest dobrym pomysłem. Jeśli jednak znajdujesz się w sytuacji, w której jedna z Twoich gałęzi nie jest tak naprawdę gałęzią z master lub Twoja historia jest tak inna, że po prostu chcesz zniszczyć gałąź master na rzecz nowej gałęzi, nad którą pracowałeś, możesz to zrobić:

git push [-f] origin seotweaks:master
Jest to szczególnie pomocne, jeśli otrzymujesz ten błąd:
! [remote rejected] master (deletion of the current branch prohibited)

A Ty nie używasz Githuba i nie masz dostęp do zakładki "Administracja", aby zmienić domyślną gałąź dla zdalnego repozytorium. Co więcej, nie spowoduje to przestojów ani warunków wyścigu, jakie możesz napotkać, usuwając mistrza: {]}

git push origin :master
 21
Author: mholm815,
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:20:56

Uznałem, że jest to najlepszy sposób na zrobienie tego (miałem problem z moim serwerem, który nie pozwolił mi usunąć).

Na serwerze, na którym znajduje się repozytorium origin, wpisz następujące dane z katalogu wewnątrz repozytorium:

git config receive.denyDeleteCurrent ignore

Na twojej stacji roboczej:

git branch -m master vabandoned                 # Rename master on local
git branch -m newBranch master                  # Locally rename branch newBranch to master
git push origin :master                         # Delete the remote's master
git push origin master:refs/heads/master        # Push the new master to the remote
git push origin abandoned:refs/heads/abandoned  # Push the old master to the remote

Powrót na serwer, na którym znajduje się repozytorium origin:

git config receive.denyDeleteCurrent true

Podziękowania dla autora wpisu na blogu http://www.mslinn.com/blog/?p=772

 1
Author: ScottG,
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:23:18