Jak mogę skopiować zawartość oddziału do nowego oddziału lokalnego?


270

Pracowałem w lokalnym oddziale, a także przekazałem zmiany do zdalnego. Chcę cofnąć zmiany w tym oddziale i zrobić coś innego, ale nie chcę całkowicie stracić pracy. Myślałem o czymś takim, jak utworzenie nowego oddziału lokalnie i skopiowanie tam starego oddziału, a następnie mogę cofnąć zmiany i kontynuować pracę nad starym oddziałem. Czy może jest lepszy sposób? Lub jak to zrobić?


10
4 lata później, dzięki Git 2.15 (IV kwartał 2017), będziesz miał git branch -c A B. Zobacz moją odpowiedź poniżej
VonC

Odpowiedzi:


445
git checkout old_branch
git branch new_branch

To da ci nową gałąź „new_branch” o takim samym stanie jak „old_branch”.

To polecenie można połączyć z następującymi:

git checkout -b new_branch old_branch

134
Lub nawet krócej git checkout -b new_branch(gdy już jesteś włączony old_branch).
Koraktor

4
To właśnie tworzy nową gałąź, ale nie może skopiować zawartości z jednej gałęzi do drugiej. Kiedy próbuję wykonać te polecenia, pokazuje tylko „Gałąź o nazwie **** już istnieje”.
anoop

7
Myślę, że jeśli ktoś utworzy nową gałąź, taką jak ta, nie ma od razu kopii starej gałęzi, ale po prostu nowy wskaźnik na czubku starej gałęzi. Ale kiedy robisz teraz coś w rodzaju zmiany nowej gałęzi, powinieneś zobaczyć, że stara gałąź jest nadal w oryginalnym stanie, podczas gdy nowa gałąź jest modyfikowana. Myślę więc, że robi to, czego chce OP.
uli_1973

1
git checkout old_branch i niż git branch new_branch .... Lepiej jest użyć powyższej komendy podczas produkcji, ponieważ poniżej komenda utworzy nową gałąź i przeniesie cię do nowej gałęzi (zmień gałąź na nową gałąź) .... git checkout -b new_branch old_branch
Kiran

Aby zastąpić gałąź, zobacz stackoverflow.com/questions/26961371/…
MCCCS,

55
git branch copyOfMyBranch MyBranch

Pozwala to uniknąć potencjalnie czasochłonnego i niepotrzebnego sprawdzania oddziału. Przypomnij sobie, że kasa modyfikuje „działające drzewo”, co może zająć dużo czasu, jeśli jest duże lub zawiera duże pliki (na przykład obrazy lub filmy).


1
Oczywiście, jeśli masz pliki binarne w git, szczególnie duże, prawdopodobnie warto przeanalizować strategię dla tych plików. Oczywiście będą istnieć nietypowe przypadki i posiadanie plików binarnych w git byłoby całkowicie dopuszczalne.
wielebny

52

W Git 2.15 (IV kwartał 2017 r.) git branch„Nauczyłem się” -c/-Ctworzyć nowy oddział poprzez skopiowanie istniejącego.

Zobacz commit c8b2cec (18 czerwca 2017 r.) Autor: Ævar Arnfjörð Bjarmason ( avar) .
Zobacz commit 52d59cc , commit 5463caa (18 cze 2017) autor: Sahil Dua ( sahildua2305) .
(Połączone przez Junio ​​C Hamano - gitster- w commit 3b48045 , 03 października 2017)

branch: dodaj opcję --copy( -c), aby przejść z --move( -m)

Dodaj możliwość do --copygałęzi i jej ponownego logowania i konfiguracji, używa to tej samej maszyny podstawowej, co opcja --move( -m), z tym wyjątkiem, że rejestr i konfiguracja są kopiowane, a nie przenoszone.

Jest to przydatne dla np kopiowania temat oddziału do nowej wersji, np workaby work-2po złożeniu worktemat do listy, zachowując wszystkie informacje śledzenia i inną konfigurację, która idzie z branży, w odróżnieniu--move utrzymywania innego już przekazany oddział dokoła dla odniesienie.

Uwaga: podczas kopiowania oddziału pozostajesz w bieżącym oddziale.
Jak wyjaśnia Junio ​​C. Hamano:

Podczas tworzenia nowej gałęzi Bpoprzez skopiowanie gałęzi, Aktóra przypadkowo jest gałęzią bieżącą, aktualizuje się również, HEADaby wskazywać na nową gałąź.
Prawdopodobnie zrobiono to w ten sposób, ponieważ „ git branch -c A B” piggybacked swoją implementację na „ git branch -m A B

Nie odpowiada to zwykłym oczekiwaniom.
Gdybym siedział na niebieskim krześle, a ktoś przychodzi i przemalowuje go na czerwony, zaakceptowałbym siadanie na krześle, które jest teraz czerwone (jestem też w porządku, aby wstać, ponieważ nie ma już mojego ulubionego niebieskiego krzesła) ).

Ale jeśli ktoś stworzy nowe czerwone krzesło, wzorując je na niebieskim krześle, na którym siedzę, nie oczekuję, że zostanie zdjęty z niebieskiego krzesła i skończę na siedzeniu na nowym czerwonym.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.