두 개의 서로 다른 저장소가 있다. (A, B)
B에서 원하는 커밋 몇개에 대해서만 A에 cherry-pick 하고 싶다.
구글링해보니 B 저장소를 remote 저장소로 올리고, fetch 하라는 내용이 대부분인 것 같다.
그러나 나의 경우는 remote 저장소에 쉽게 올리지 못하는 경우이다.. (권한 문제 등등)
따라서 로컬 저장소를 cherry-pick 할 수 있는지 알아보았다.
$ git --git-dir=../<some_other_repo>/.git \
format-patch -k -1 --stdout <commit SHA> | \
git am -3 -k
2-1. 패치할 부분 수정한 후 다음 명령어 입력하면 patch 된다.
$ git add 파일명
$ git am --continue
2-2. 패치하지 않으려면 다음 명령어 실행
git am --abort
패치한 후 깃 로그를 보면 한글이 깨지는 경우가 있다. 같은 프로젝트에, 설정이 다른 것이 아닌데 한글이 깨지지 않고 잘 가져오는 경우도 있었다. (?)
could not build fake ancestor 메시지와 함께 패치 실패
Applying: 테스트한 결과 로그
error: sha1 information is lacking or useless (srcs/test.c).
error: could not build fake ancestor
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 테스트한 결과 로그
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
해결 방법
git am --show-current-patch=diff
로 확인git add
git am --continue
명령어 실행하면 패치되었다.