Scal do konkretnego zatwierdzenia


372

Utworzyłem nową gałąź o nazwie newbranchz mastergałęzi w git. Teraz mam zrobić jakąś pracę i chcą łączyć newbranchsię master; Wprowadziłem jednak kilka dodatkowych zmian newbranchi chcę połączyć newbranchsię z czwartym od ostatniego zatwierdzenia master.

Użyłem, cherry-pickale pokazuje komunikat, aby użyć właściwych opcji:

git checkout master    
git cherry-pick ^^^^HEAD newbranch

Czy mergezamiast tego mogę użyć git ?

git merge newbranch <commitid>

Odpowiedzi:


592

Oczywiście będąc w masterbranży wszystko, co musisz zrobić, to:

git merge <commit-id>

gdzie commit-idjest skrót ostatniego zatwierdzenia newbranch, który chcesz uzyskać w swoim masteroddziale.

Możesz dowiedzieć się więcej o każdym poleceniu git, wykonując git help <command>. Tak to jest git help merge. Dokumenty mówią, że ostatnim argumentem mergepolecenia jest <commit>..., więc można przekazać odwołanie do dowolnego zatwierdzenia lub nawet wielu zatwierdzeń. Chociaż nigdy sam tego nie zrobiłem.


30
nie tylko jedno zatwierdzenie, ale wszystkie zatwierdzenia poprzedzającecommit-id
Dau

53
Tak, to będzie łączyć wszystkie zobowiązuje od newbranchod czasu jego historia odbiega od mastermaksymalnie commit-iddo masteroddziału. Możesz pomyśleć o git merge <commit-id>połączeniu jakiejś nienazwanej gałęzi, która kończy się commit-idna bieżącej gałęzi.
KL-7

2
Czy mogę łączyć między dwoma lokalnymi oddziałami innymi niż master, używając identyfikatora zatwierdzenia?
skt

1
@skt, możesz po prostu być w lokalnym oddziale, z którym chcesz się połączyć przed użyciem git merge. tzn. powiedz, że chcesz scalić zatwierdzenie 18a6fac z gałęzi b2 do gałęzi b1 po prostu zróbgit checkout b1; git merge 18a6fac
XioRcaL

1
To NIE wydaje się działać, jeśli jestem na gałęzi, z którą chcę się połączyć, a jest jeszcze inna gałąź z zatwierdzeniami AB i C, a scalenie w C powoduje tylko zmiany dokonane w C, a nie A i B.
ggb667,

12

Aby utrzymać rozgałęzienie w czystości, możesz to zrobić:

git checkout newbranch
git branch newbranch2
git reset --hard <commit Id> # the commit at which you want to merge
git checkout master
git merge newbranch
git checkout newbranch2

W ten sposób newbranch zakończy się w miejscu, w którym został scalony w master, i będziesz kontynuować pracę nad newbranch2.


1

Uruchom poniższe polecenie w bieżącym folderze gałęzi, aby scalić tę <commit-id>gałąź z bieżącą gałęzią, --no-commitnie wykonuj automatycznie nowego zatwierdzenia

git merge --no-commit <commit-id>

git merge --continue można uruchomić tylko wtedy, gdy scalenie spowodowało konflikty.

git merge --abort Przerwij bieżący proces rozwiązywania konfliktów i spróbuj odtworzyć stan sprzed scalenia.

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.