2014년 4월 30일 수요일

[Git] 다른 브랜치의 일부 파일 복사(패치) 하기

Git로 다수의 브랜치를 관리하며 브랜치간 머지(merge) 하기는 굉장히 간단한 일이다. 하지만 의외로 다른 브랜치의 일부 파일만 복사(즉 파일간 머지)해 오는 형태의 작업은 많이 하지 않나보다. 찾아보니 의외로 기존 명령어에 옵션을 하나 추가해서 간단히 할 수 있었다.

아래는 이 작업과 관련한 스크린캐스트이다.


위 작업에서 사용된 커맨드는 다음과 같다.

1. 현재 브랜치와 다른 브랜치끼리의 차이점 비교
$ git diff BRANCH_NAME
하지만 좀 내용이 많아서 차이점이 많을 경우 정신붕괴의 위험(...)이 있을 수 있으므로 간단하게 표시하는 방법을 찾아보자. 다행히도 --name-status 라는 옵션이 있다.
$ git diff --name-status BRANCH_NAME

2. 파일 머지하기
$ git checkout -p BRANCH_NAME FILE_PATH
checkout 시 -p 옵션을 주면 Patch 형태로 동작한다. 따라서 다른 브랜치의 특정 파일을 현재 브랜치의 파일로 패치 할 수 있다. 다만 이 기능은 머지가 아니라 패치이므로 현재 브랜치의 수정 내역과는 관계 없이 해당 파일의 내용으로 변경된다. 만약 수동으로 머지하길 원한다면 이 커맨드 이후 물어오는 화면에서 'e' 키를 눌러서 수동으로 편집하는 방법이 있다.

3. 파일 복사해오기
$ git checkout BRANCH_NAME FILE_PATH
현재 브랜치에 스테이징 되어 있지 않은 새로운 파일이 다른 브랜치에 있고 이 파일을 복사해 오려면 그냥 -p 옵션을 빼고 checkout 을 하면 된다.

자주 사용 할 만한 기능 같은데 더 단순한 방법이 있을지도 모르겠다. 좀 더 찾아봐야겠다.

[관련링크] Git - Seorenn Note
[관련글] [Emacs] Magit을 이용해 다른 브랜치의 일부 파일 머지하기

댓글 없음 :