Scenariusz: repozytorium z całkowicie odłączonymi fragmentami historii. Na przykład. z różnych pilotów, które nie mają wspólnej historii git. (Zwykle występuje w scenariuszach z poddrzewem git.)git cherry-wybrać różnicę między commitami bez wspólnej historii?
Czy można wybrać różnicę między tymi dwoma zatwierdzeniami, nawet jeśli nie mają one wspólnej historii? (A aktywny popełnić ma wspólną historię z jednym z tych dwóch)
Próbowałem to (w podkatalogu z -X subtree=sub/dir
opcja):
git cherry-pick -X subtree=vendor/package aaa/aaa..bbb/bbb
Bez poddrzewa, to byłby prostszy:
git cherry-pick aaa/aaa..bbb/bbb
Gdzie aaa/aaa i bbb/bbb są dwoma zatwierdzeniami z rozłączoną historią.
Niestety, to nie działa: aaa/aaa..bbb/bbb nie jest odczytywany jako diff, ale coś innego.
To samo można wyświetlić za pomocą git show aaa/aaa..bbb/bbb
, które różni się od git diff aaa/aaa bbb/bbb
. Na przykład. jeśli oba mają identyczne pliki, wtedy git diff będzie pusty, ale git pokazuje a..b pokaże tylko b, ale nie a.
Uwaga: Mój osobisty przypadek użycia jest z tłem poddrzewa. Wspominam o tym, aby uniknąć przypadku sztucznego użycia, gdzie ludzie zwykle zaczynają debatować na temat ważności przypadku użycia, zamiast na faktycznym pytaniu.
Idealna odpowiedź najpierw zajmie się ogólnym przypadkiem, a następnie zajmie się sprawą poddrzewa.
git apply to dobry pomysł! Ale nie jestem pewien, czy twoje polecenia robią to, co obiecano. – donquixote
Problemem, który widzę przy wyborze jest to, że wybiera tylko ostatnie zatwierdzenie, a nie cały zakres zatwierdzeń prowadzących od aaa/aaa do bbb/bbb (który tak naprawdę nie istnieje - to jest punkt). – donquixote