Wydaje mi się, że termin, którego szukasz, to „wiśniowy wybór”. Oznacza to, że weź pojedynczy commit ze środka jednej gałęzi i dodaj go do innego:
A-----B------C
\
\
D
staje się
A-----B------C
\
\
D-----C'
Można to oczywiście zrobić za pomocą polecenia git cherry-pick.
Problem z tym zatwierdzeniem polega na tym, że git uważa, że zatwierdzenia zawierają całą historię przed nimi - więc jeśli masz trzy takie zatwierdzenia:
A-----B-----C
I spróbuj pozbyć się B, musisz stworzyć zupełnie nowy commit, taki jak:
A-----------C'
Gdzie C 'ma inny identyfikator SHA-1. Podobnie, wiśniowe wybieranie zmiany z jednej gałęzi do drugiej polega w zasadzie na wygenerowaniu łatki, a następnie zastosowaniu jej, a tym samym utracie historii w ten sposób.
Ta zmiana identyfikatorów zatwierdzeń łamie między innymi funkcjonalność scalania git (chociaż jeśli jest używana oszczędnie, istnieją heurystyki, które to opisują). Co ważniejsze, ignoruje zależności funkcjonalne - jeśli C faktycznie używał funkcji zdefiniowanej w B, nigdy się nie dowiesz.
Być może lepszym sposobem radzenia sobie z tym byłoby posiadanie bardziej drobnoziarnistych gałęzi. Oznacza to, że zamiast po prostu mieć „master”, miej „featureA”, „bugfixB” itd. Przeprowadź przegląd kodu na całej gałęzi na raz - gdzie każda gałąź jest bardzo skoncentrowana na robieniu tylko jednej rzeczy - a następnie połącz ją jedna gałąź, kiedy skończysz. To jest przepływ pracy, do którego jest przeznaczony git iw czym jest dobry :)
Jeśli nalegasz na zajmowanie się rzeczami na poziomie łatek, możesz spojrzeć na darcs - traktuje repozytorium jako zestaw łatek, a zatem wybieranie wiśni staje się podstawową operacją. Ma to jednak swój własny zestaw problemów, takich jak bycie bardzo wolnym :)
Edycja: Poza tym nie jestem pewien, czy rozumiem twoje drugie pytanie, dotyczące dwóch skryptów. Może mógłbyś opisać to bardziej szczegółowo, być może jako osobne pytanie, aby uniknąć zamieszania?