Strona główna » Blog » Kopiowanie pojedynczych commitów z innych repozytoriów Git

Kopiowanie pojedynczych commitów z innych repozytoriów Git

Czasami ktoś zrobi dobry software, ale od kilku lat nie zagląda do repo a w tym czasie powstaje 20 niezgodnych ze sobą forków. Każdy wnosi coś dobrego i chcemy sobie wziąć pojedyncze commity z każdego z nich. Git umożlwia takie działania. Aby to nie zaginęło chciałbym zachować tutaj świetną instrukcję napisaną przez Luca Guidiego.

# Klonujemy nasze repo
$ git clone git@github.com:gakowalski/pewien-projekt.git

# Dodajemy (jako "inny-programista") repo z którego chcemy kopiować wybrane commity
$ git remote add inny-programista git://github.com/inny-programista/pewien-projekt.git

# Pobieramy z niego gałęzie
$ git fetch inny-programista

# Wypisujemy listę commitów, aby znaleźć odpowiednie ID
$ git log inny-programista/master

# Kopiujemy wybrane commity po ID (lub fragmencie ID, jeżeli jest jednoznaczny)
$ git cherry-pick 97fedac

# Wypychamy zmiany
$ git push origin master

Jeżeli korzystamy z GitHuba, to takie “podebrane” commity mogą prawdopodobnie różnie się wyświetlać. W moim przypadku GitHub nie rozpoznał adresu e-mail usera, którego commit skopiowałem i wyświetlił informację o nim tak:

W przypadku takiego nierozpoznania commit zosatł przypisany do mnie. Ma to m.in take skutki, że nie widać tej migracji na wykresach i podejrzewam, że autor commitu ani nie otrzymuje żadnego powiadomienia ani na jego profilu nie wyświetla się kontrybucja do mojego repo.