다른 local 깃 저장소의 내용을 cherry-pick 하는 방법

KiJeong·2022년 8월 16일
0

상황

두 개의 서로 다른 저장소가 있다. (A, B)
B에서 원하는 커밋 몇개에 대해서만 A에 cherry-pick 하고 싶다.

구글링해보니 B 저장소를 remote 저장소로 올리고, fetch 하라는 내용이 대부분인 것 같다.
그러나 나의 경우는 remote 저장소에 쉽게 올리지 못하는 경우이다.. (권한 문제 등등)
따라서 로컬 저장소를 cherry-pick 할 수 있는지 알아보았다.

방법

  1. 다음 링크 내용을 참고하여 patch 한다.
$ 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

발생된 문제

  1. 패치한 후 깃 로그를 보면 한글이 깨지는 경우가 있다. 같은 프로젝트에, 설정이 다른 것이 아닌데 한글이 깨지지 않고 잘 가져오는 경우도 있었다. (?)

  2. 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".

해결 방법

  • 해당 문제 발생시 terminal 에서 git am --show-current-patch=diff 로 확인
  • 해당하는 소스 파일을 직접 수정한 후 git add
  • git am --continue 명령어 실행

하면 패치되었다.

0개의 댓글