Najważniejsze, czego tu chcesz, to git add -p
( -p
to synonim --patch
). Zapewnia to interaktywny sposób sprawdzania zawartości, pozwalając ci zdecydować, czy każdy przystojniak powinien wejść, a nawet umożliwiając ręczną edycję łatki, jeśli to konieczne.
Aby użyć go w połączeniu z cherry-pick:
git cherry-pick -n <commit> # get your patch, but don't commit (-n = --no-commit)
git reset # unstage the changes from the cherry-picked commit
git add -p # make all your choices (add the changes you do want)
git commit # make the commit!
(Podziękowania dla Tima Henigana za przypomnienie mi, że git-cherry-pick ma opcję - no-commit, oraz podziękowania dla Felixa Rabe'a za wskazanie, że musisz zresetować! Jeśli chcesz tylko pozostawić kilka rzeczy poza zatwierdzeniem , możesz użyć git reset <path>...
do rozpakowania tylko tych plików).
W add -p
razie potrzeby możesz oczywiście podać konkretne ścieżki . Jeśli zaczynasz z plaster można wymienić cherry-pick
z apply
.
Jeśli naprawdę chcesz git cherry-pick -p <commit>
(ta opcja nie istnieje), możesz użyć
git checkout -p <commit>
Spowoduje to różnicowanie bieżącego zatwierdzenia w stosunku do określonego przez Ciebie zatwierdzenia i pozwoli na indywidualne zastosowanie fragmentów z tego pliku różnic. Ta opcja może być bardziej przydatna, jeśli zatwierdzenie, które pobierasz, powoduje konflikty scalania w części zatwierdzenia, którego nie jesteś zainteresowany. (Pamiętaj jednak, że checkout
różni się od cherry-pick
: checkout
stara się <commit>
całkowicie cherry-pick
zastosować zawartość, stosuje różnicę określony zatwierdzenie od jego rodzica. Oznacza to, że checkout
może zastosować więcej niż tylko to zatwierdzenie, które może być więcej niż chcesz.)