Jak zatwierdzić zmiany w nowej gałęzi


151

Właśnie dokonałem zmian w gałęzi. Jak mogę zatwierdzić zmiany w innej gałęzi?

Próbuję użyć:

git checkout "the commmit to the changed branch" -b "the other branch"

Jednak uważam, że nie jest to właściwe, ponieważ w tym przypadku tworzę nową gałąź zamiast zatwierdzać zmiany w „innej gałęzi”.

Czy powinienem zamiast tego użyć następującego polecenia?

git merge "the other branch"

Tylko jedno zatwierdzenie czy kilka?
— Carl Norum

Odpowiedzi:


268

git checkout -b your-new-branch

git add <files>

git commit -m <message>

Najpierw sprawdź swój nowy oddział. Następnie dodaj wszystkie pliki, które chcesz przekazać do przemieszczania. Na koniec zatwierdź wszystkie dodane pliki. Możesz to zrobić git push origin your-new-branchpóźniej, aby zmiany pojawiły się na pilocie.


1
skoro otrzymałem new-branch z git checkout v3.0 (gałąź przed wprowadzeniem zmian) new-branch, czy nadal muszę używać "git add <files>"?
— user1988385

Możesz zrobić, git statusaby zobaczyć, co jest obecnie wystawiane, a co nie.
— John Brodie,

5
Dlaczego jedno git addi drugie git commit -a?
— Carl Norum

11
To nie jest git checkout -b your-new-branchzamiast git checkout your-new-branch?
— Schrodinger's'Cat

1
co powiesz na to, że śledziłem już pliki i chcę przełączyć się do nowej gałęzi, dodać te pliki do nowo utworzonej gałęzi?
— król-tyłek jakieś pytanie

58

Jeśli nie dokonałeś zmian

Jeśli Twoje zmiany są zgodne z inną gałęzią

Tak jest w przypadku pytania, ponieważ OP chce zatwierdzić nową gałąź i ma również zastosowanie, jeśli zmiany są zgodne z gałęzią docelową bez wyzwalania nadpisania.

Jak w zaakceptowanej odpowiedzi Johna Brodiego, możesz po prostu pobrać nową gałąź i wykonać pracę:

git checkout -b branch_name
git add <files>
git commit -m "message"

Jeśli Twoje zmiany są niezgodne z inną gałęzią

Jeśli pojawi się błąd:

error: Your local changes to the following files would be overwritten by checkout:
...
Please commit your changes or stash them before you switch branches

Następnie możesz schować swoją pracę, utworzyć nową gałąź, a następnie pobrać zmiany w skrytce i rozwiązać konflikty:

git stash
git checkout -b branch_name
git stash pop

Będzie tak, jakbyś wprowadził te zmiany po utworzeniu nowej gałęzi. Następnie możesz zatwierdzić jak zwykle:

git add <files>
git commit -m "message"

Jeśli dokonałeś zmian

Jeśli chcesz zachować zmiany w oryginalnej gałęzi

Zobacz odpowiedź Carla Noruma z selekcją wiśni, która jest właściwym narzędziem w tym przypadku:

git checkout <target name>
git cherry-pick <original branch>

Jeśli nie chcesz zachować zatwierdzeń w oryginalnej gałęzi

Zobacz odpowiedź joeytwiddle na temat tego potencjalnego duplikatu . Wykonaj odpowiednio dowolny z powyższych kroków, a następnie przywróć oryginalną gałąź:

git branch -f <original branch> <earlier commit id>

Jeśli wprowadziłeś zmiany do udostępnionego pilota, takiego jak GitHub, nie powinieneś próbować tego wycofywania, chyba że wiesz, co robisz.


3
Każdy powinien wypróbować ten kod. Ponieważ większość ludzi, którzy szukają odpowiedzi, ma już pewne zmiany w twoim istniejącym kodzie.
— Sushin Pv

2
Dlaczego dodałeś stash and stash pop? Kiedy wyewidencjonujesz nową gałąź, twoje zmiany będą dostępne do dodania i zatwierdzenia, bez konieczności przechowywania.
— Tristan

@Tristan Masz rację w przypadku, gdy zmiany są zgodne, a pliki nie nadpisują. W przeciwnym razie otrzymuję error: Your local changes to the following files would be overwritten by checkout: ... Please commit your changes or stash them before you switch branches.pytanie Czy chcesz napisać nową odpowiedź czy edytować moją odpowiedź? Jeśli nie, mogę sam to edytować.
— miguelmorin

Ok, masz całkowitą rację. Uważam jednak, że powinieneś uzupełnić swoją odpowiedź, aby pokazać, co przynosi ona oprócz zaakceptowanej odpowiedzi.
— Tristan

@Tristan Zrobiłem to. PO pytał o nowy oddział, w takim przypadku zaakceptowana odpowiedź jest prawidłowa. Zachowuję swoją, ponieważ inni uznali moją odpowiedź za przydatną. To długa odpowiedź i chętnie ją edytuję z wszelkimi opiniami.
— miguelmorin

24

Jeśli dobrze rozumiem, zobowiązałeś się do wykonania zobowiązania changed_branchi chcesz go skopiować other_branch? Łatwo:

git checkout other_branch
git cherry-pick changed_branch

5
To jest właściwa odpowiedź na to, co próbuje osiągnąć.
— Sean
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.