Jak wziąć plik git diff i zastosować go do lokalnego oddziału, który jest kopią tego samego repozytorium?

491

Mam plik .diff utworzony przez współpracownika i chciałbym zastosować zmiany wymienione w tym pliku diff do mojego lokalnego oddziału dokładnie tego samego repozytorium. Nie mam dostępu do komputera tego pracownika ani oddziału, który został użyty do wygenerowania tego pliku różnicowego.

Oczywiście mógłbym przejść wiersz po wierszu i przepisać wszystko, ale wolałbym nie narażać systemu na błędy ludzkie. Jak najłatwiej to zrobić?

Mike_K
źródło

Odpowiedzi:

746

Skopiuj plik diff do katalogu głównego repozytorium, a następnie wykonaj:

git apply yourcoworkers.diff

Więcej informacji o applypoleceniu jest dostępnych na jego stronie man .

Nawiasem mówiąc: lepszym sposobem na wymianę całych zatwierdzeń przez plik jest kombinacja poleceń git format-patchnadawcy, a następnie git amodbiorcy, ponieważ przenosi także informacje o autorze i komunikat zatwierdzenia.

Jeśli aplikacja łatki zawiedzie i jeśli zatwierdzenia, z których wygenerowano różnicę, faktycznie znajdują się w twoim repozytorium, możesz użyć -3opcji, applyktóra próbuje scalić zmiany.

Działa również z potokiem Unix w następujący sposób:

git diff d892531 815a3b5 | git apply
Philipp
źródło
3
Dzięki za odpowiedź, ale spowodowało to błąd: łatka nie powiodła się: nazwa_pliku.php: 202 błąd: nazwa_pliku.php: łatka nie ma zastosowania. Dobrą wiadomością jest to, że nie jest to pierwsza nazwa pliku w pliku, więc przynajmniej byłby w stanie przetworzyć część pliku. jakieś pomysły?
Mike_K,
4
Wydaje się, że masz także zmiany w tym pliku, które uniemożliwiają poprawkę. Aby rozwiązać ten problem, możesz zatwierdzić zmiany, utworzyć nowy oddział, zresetować go do zatwierdzenia, w którym ty i twój współpracownik się rozeszliście, zastosować łatkę, zatwierdzić ją, a następnie scalić dwa oddziały.
Philipp
3
@orlybg Jeśli jeszcze tego nie zrobiłeś, zrób, git reset --hardaby przywrócić drzewo robocze do ostatniego zatwierdzenia. Gdy już to zrobiłeś, dołącz wersję, do której chcesz wrócić.
Philipp
5
@orlybg Przykro mi, ale potem masz problemy. Git tworzy tylko punkt kontrolny, do którego możesz wrócić po dokonaniu zatwierdzenia. Dlatego wielu przewodników git zaleca częste i częste dokonywanie zleceń .
Philipp
4
@orlybg przynajmniej, uruchom git stashzanim wykonasz jakąś akcję, po której możesz chcieć cofnąć. W obu przypadkach możesz przywrócić skrytkę i dokonać później.
Maurice