Pracuję z repozytorium git, które wymaga zatwierdzenia z innego repozytorium git, które nie wie nic o pierwszym.
Zazwyczaj wybrałbym cherry przy użyciu HEAD@{x}
w dzienniku reflog, ale ponieważ .git
nic nie wie o tym wpisie reflog (inny katalog fizyczny), w jaki sposób mogę to wybrać, czy mogę?
Używam git-svn
. Moja pierwsza gałąź korzysta git-svn
z trunk
repozytorium Subversion, a kolejna gałąź korzysta git-svn
z gałęzi Subversion.
git
cherry-pick
gitcoder182
źródło
źródło
Odpowiedzi:
Musisz dodać drugie repozytorium jako zdalne, a następnie pobrać jego zmiany. Stamtąd zobaczysz zatwierdzenie i możesz go wybrać.
Tak:
Teraz masz wszystkie informacje do zrobienia
git cherry-pick
.Więcej informacji na temat pracy z pilotami tutaj: https://git-scm.com/book/en/v2/Git-Basics-Working-with-Remotes
źródło
--stdlayout
opcji git-svn, jeśli używasz standardowego układu trunk / branch / tags w Subversion. Wtedy gałąź Subversion będzie zwykłą zdalną gałęzią git.git am < d821j8djd2dj812.patch
. Poza GH podobne koncepcje można zrealizować zgodnie z alternatywną odpowiedzią poniżej.Jak podano, odpowiedzią jest użycie poprawki formatu, ale ponieważ pytanie brzmiało, jak wybrać z innego folderu, oto fragment kodu, aby to zrobić:
źródło
git format-patch
polecenie tworzy łatkę zsome_other_repo
zatwierdzenia określonego przez jego SHA (tylko-1
dla jednego zatwierdzenia). Ta poprawka jest przesyłana potokowogit am
, która lokalnie stosuje łatkę (-3
oznacza próbę scalenia trójstronnego, jeśli łatka nie zastosuje się czysto). Mam nadzieję, że to wyjaśnia.--ignore-whitespace
. Pełne polecenie:git --git-dir=../<some_other_repo>/.git format-patch -k -1 --stdout <commit SHA> | git am -3 -k --ignore-whitespace
Oto przykład zdalnej fetch-merge.
Następnie możesz:
lub możesz nawet scalić cały oddział
źródło
git merge projectB/master
Jest bardzo, bardzo źle , ponieważ nie starasz zmiany z jednego commit (jak cherry-pick by), jesteś w rzeczywistości scalanie wszystkich zmian wprojectB/master
które nie są zawarte w swoimmaster
oddziale.git remote rm projectB
. Służy równieżgit tag -d tag-name
do usuwania tagów pobranych ze zdalnego repozytorium. Zdalne zatwierdzenia nie będą już widoczne w twojej historii, a przycinanie ostatecznie je usunie z pamięci.Możesz to zrobić, ale wymaga to dwóch kroków. Oto jak:
Zastąp
<remote-git-url>
adres URL lub ścieżkę do repozytorium, z którego chcesz wybrać Cherry Cherry.Zamień
<branch>
na nazwę gałęzi lub tagu, którą chcesz wybrać ze zdalnego repozytorium.Możesz zastąpić
FETCH_HEAD
git SHA z oddziału.Zaktualizowano: zmodyfikowano na podstawie opinii @ pkalinow.
źródło
git fetch <repo-url> <branch> && git cherry-pick <sha>
.Oto kroki, aby dodać zdalny, pobrać gałęzie i wybrać zatwierdzenie
Źródło: https://coderwall.com/p/sgpksw
źródło
Zobacz Jak utworzyć i zastosować łatkę za pomocą Git . (Na podstawie sformułowania twojego pytania założyłem, że to inne repozytorium jest dla zupełnie innej bazy kodu. Jeśli jest to repozytorium dla tej samej bazy kodu, powinieneś dodać je jako zdalne, jak sugeruje @CharlesB. Nawet jeśli jest to dla innej podstawa kodu, myślę, że nadal możesz dodać go jako zdalny, ale możesz nie chcieć umieścić całej gałęzi w swoim repozytorium ...)
źródło
Możesz to zrobić w jednym wierszu w następujący sposób. Mam nadzieję, że znajdujesz się w repozytorium git, które wymaga zmiany, którą wybrałeś, i sprawdziłeś poprawność gałęzi.
git fetch [adres URL oddziału] [Oddział do pobrania z] i & git cherry-pick [identyfikator zatwierdzenia]
źródło
ssh://
części, tylko dlahttps://
Tak. Pobierz repozytorium, a następnie wybierz z gałęzi zdalnej.
źródło
Zakładając, że
A
jest to repozytorium, z którego chcesz wybrać wiśnia, iB
to jest to, do którego chcesz wybrać wiśnia, możesz to zrobić, dodając</path/to/repo/A/>/.git/objects
do</path/to/repo/B>/.git/objects/info/alternates
. Utwórz tealternates
pliki, jeśli nie istnieją.To sprawi, że repo B uzyska dostęp do wszystkich obiektów git z repozytorium A i sprawi, że wybranie dla ciebie będzie działać.
źródło
Moja sytuacja była taka, że mam nagie repozytorium, do którego drużyna naciska, i klon tego siedzącego tuż obok. Ten zestaw linii w Makefile działa dla mnie poprawnie:
Utrzymując aktualność mistrza samego repozytorium, jesteśmy w stanie wybrać proponowaną zmianę opublikowaną w samym repo. Mamy również (bardziej skomplikowany) sposób wybrania wielu przegródek do skonsolidowanego przeglądu i testowania.
Jeśli „nic nie wie” oznacza, że „nie można używać jako pilota”, to nie pomaga, ale to pytanie SO pojawiło się, gdy szukałem go w Google, aby wymyślić ten przepływ pracy, więc pomyślałem, że wrócę.
źródło
Jeśli chcesz wybrać wiele zatwierdzeń dla danego pliku, aż dojdziesz do danego zatwierdzenia, użyj następujących.
źródło