Skip to content

Git의 -m 옵션이란 뭘까? (cherry-pick과 revert)

Published: at 오전 01:11

개요

git cherry-pickgit revert 명령어에서 사용되는 -m 옵션은 머지 커밋(merge commit)을 처리할 때 필수적인 옵션이다. 잘 이해하지 않은 채 사용한 이 옵션에 대해서 정리해보았다.

목차

사용해야 하는 상황

머지 커밋(두 개 이상의 브랜치가 합쳐진 커밋)을 cherry-pick하거나 revert할 때 반드시 -m 옵션을 사용해야한다. 머지 커밋은 두 개 이상의 부모 커밋을 가지고 있어서, Git은 어떤 부모를 “메인 라인”으로 간주해야 할지 알 수 없다.

필요한 이유

머지 커밋은 여러 부모 커밋을 가지고 있기 때문에, Git은 어떤 부모 커밋을 기준으로 변경사항을 적용하거나 취소해야 할지 알 수 없다. -m 옵션은 Git에게 “이 부모 커밋을 기준으로 변경사항을 적용/취소하라”고 지시하는 역할을 한다.

역할과 작동 방식

-m 옵션은 머지 커밋의 여러 부모 중 어떤 부모를 메인 라인으로 볼 것인지 지정한다:

이 값에 따라 Git은 선택된 부모 커밋과 머지 커밋 간의 차이를 계산하여 적용하거나 취소한다.

사용 예시

cherry-pick 예시

# M이 머지 커밋일 때, 첫 번째 부모(main)를 기준으로 변경사항 적용
git cherry-pick -m 1 M

# M이 머지 커밋일 때, 두 번째 부모(feature)를 기준으로 변경사항 적용
git cherry-pick -m 2 M

revert 예시

# M이 머지 커밋일 때, main 브랜치 라인을 유지하고 머지된 변경사항 취소
git revert -m 1 M

# M이 머지 커밋일 때, feature 브랜치 라인을 유지하고 머지된 변경사항 취소
git revert -m 2 M

옵션 명시 여부에 따른 차이

-m을 명시하지 않는 경우:

-m을 명시하는 경우:

시각적 이해

머지 커밋 구조:

여기서 M은 머지 커밋이며:

-m 1-m 2의 관점 차이:

-m 1 사용 시 (일반적인 경우):

-m 2 사용 시 (드문 경우):

결론

대부분의 워크플로우에서는 -m 1을 사용하는 것이 일반적이며, 이는 “main 브랜치에 feature 브랜치의 변경사항을 적용/제거한다”는 의미이다. 올바른 -m 값 선택은 프로젝트의 브랜칭 전략과 워크플로우에 따라 달라질 수 있다.