HOWTO · Git

Git 리포지토리에서 특정 커밋 가져오기

이 문서에서는 원격 Git 저장소에서 특정 커밋을 가져오는 방법을 설명합니다.

이 페이지의 내용

현재 브랜치에 커밋 하나의 변경 사항만 적용하려면 원격 이력을 가져온 뒤 git cherry-pick <commit-id>를 사용하세요. 특정 커밋의 과거 상태를 살펴보거나 그 지점에서 작업을 이어가려면 해당 커밋에서 브랜치를 만드세요. 브랜치 이력 전체를 통합하려면 git merge 또는 git pull을 사용하세요. 여기에는 이전 커밋도 포함될 수 있습니다. 현재 브랜치를 과거 시점으로 옮기려는 경우에만 git reset을 사용하세요.

특정 커밋에 알맞은 작업 선택하기

각 작업의 결과는 서로 다릅니다. git cherry-pick은 선택한 커밋이 도입한 변경 사항을 현재 브랜치에 새 커밋으로 적용합니다. 커밋에서 브랜치를 만들면 해당 스냅샷을 기준으로 작업을 시작합니다. 커밋을 병합하면 현재 브랜치에 아직 없는, 해당 커밋에서 도달 가능한 이력이 들어옵니다. pull은 원격에서 가져온 내용을 설정된 pull 동작에 따라 통합합니다. reset은 현재 브랜치 참조를 이동하며, --hard는 작업 트리와 인덱스도 교체합니다. 변경 사항 하나가 필요한지, 과거 상태에서 시작할지, 원격 이력을 통합할지, 브랜치를 되돌릴지에 따라 작업을 선택하세요.

커밋 해시 찾기

git log를 실행하면 커밋 ID, 작성자, 메시지를 볼 수 있습니다. 간단한 목록을 보려면 git log --oneline을 사용하세요. 원하는 커밋에 표시된 ID를 복사하면 됩니다. Git은 전체 객체 ID뿐 아니라 다른 ID와 혼동되지 않는 축약 ID도 허용합니다. 커밋이 원격에만 있다면 먼저 git fetch origin으로 가져온 뒤 갱신된 이력을 살펴보세요. origin은 사용하는 원격 이름으로, <commit-id>는 선택한 ID로 바꾸세요.

git cherry-pick으로 커밋 하나 적용하기

원격 브랜치 또는 해당 객체를 가져온 다음, git fetch origin을 실행하고 이어서 git cherry-pick <commit-id>를 실행해 선택한 커밋을 적용하세요. 브랜치 전체를 병합하지 않고 커밋 하나의 변경 사항만 가져오려면 이 방법을 사용하면 됩니다. 다음 로컬 예제는 토픽 브랜치에서 커밋을 만든 뒤 main에 적용합니다.

repo=$(mktemp -d)
trap 'rm -rf "$repo"' EXIT
git -C "$repo" init -q -b main
git -C "$repo" config user.name "Example User"
git -C "$repo" config user.email "example@example.com"
printf 'base\n' > "$repo/notes.txt"
git -C "$repo" add notes.txt
git -C "$repo" commit -qm "Add notes"
git -C "$repo" switch -q -c topic
printf 'one change\n' >> "$repo/notes.txt"
git -C "$repo" add notes.txt
git -C "$repo" commit -qm "Add one change"
commit_id=$(git -C "$repo" rev-parse HEAD)
git -C "$repo" switch -q main
git -C "$repo" cherry-pick "$commit_id"
printf 'Applied one commit to main.\n'
[main 5ede2b1] Add one change
 Date: Mon Oct 26 03:50:14 2026 +0000
 1 file changed, 1 insertion(+)
Applied one commit to main.

변경 사항이 충돌하면 충돌 표시가 된 파일을 해결하고 git add로 해결 내용을 스테이징한 다음 git cherry-pick --continue를 실행하세요. 작업을 중단하고 시작 전 상태로 돌아가려면 git cherry-pick --abort를 사용하세요. 다른 작업을 시작하기 전에 현재 작업을 완료하거나 중단해야 합니다.

특정 커밋에서 브랜치 만들기

현재 브랜치를 이동하지 않고 커밋을 살펴보거나 그 상태에서 빌드하려면 원격을 가져온 뒤 git checkout -b review-branch <commit-id>를 실행하세요. 그러면 해당 커밋에서 review-branch를 만들고 그 브랜치로 전환합니다. 새 브랜치에는 해당 커밋까지의 이력이 포함됩니다. 다른 브랜치의 이후 커밋은 병합하거나 cherry-pick하지 않는 한 포함되지 않습니다.

원격에서 커밋을 가져와 병합하기

git fetch origin을 실행하면 원격 추적 참조를 갱신하지만 가져온 내용을 현재 브랜치에 통합하지는 않습니다. 그런 다음 git merge <commit-id>를 사용하면 선택한 커밋과 그 커밋에서 도달 가능하며 현재 브랜치에는 없는 이력을 병합합니다. 이 과정에서 상위 커밋도 들어올 수 있으므로 선택한 변경 사항 하나만 적용하는 것과는 다릅니다. 결과 이력을 확인하려면 git log --oneline --graph --decorate를 사용하세요.

커밋 해시로 git pull 사용하기

원격 서버가 요청을 허용하고 해당 객체에 도달할 수 있다면 원시 커밋 ID를 가져올 수 있는 경우도 있습니다. 지원 여부는 서버마다 다르므로 git pull origin <commit-id>는 변경 사항 하나를 선택하는 보편적인 방법이 아닙니다. 요청이 받아들여지면 pull은 설정된 동작에 따라 내용을 가져와 통합합니다. 이는 “이 커밋만 적용”한다는 뜻이 아닙니다. 변경 사항 하나만 적용하려면 가져온 뒤 cherry-pick을 사용하세요. 그 외에는 이름이 지정된 브랜치를 가져온 뒤 해당 브랜치를 pull하거나 병합하세요.

특정 커밋으로 브랜치 재설정하기

현재 브랜치를 이동하고 인덱스와 작업 트리를 해당 커밋의 상태로 교체하려는 경우에만 git reset --hard <commit-id>를 사용하세요. 이 명령은 커밋되지 않은 변경 사항을 삭제할 수 있습니다. 이후 이동한 브랜치를 push하면 협업자가 다시 작성된 공유 이력을 조정해야 할 수도 있습니다. reset하기 전에 git status를 확인하고 필요한 작업을 보존하세요. 공개된 이력을 유지하면서 더 안전하게 되돌리려면 git revert <commit-id>를 사용해 선택한 변경 사항을 되돌리는 새 커밋을 만드세요.

자주 묻는 질문

커밋 ID는 어떻게 찾나요? git log 또는 git log --oneline을 사용하세요. 커밋이 원격에만 있다면 먼저 가져오세요.

cherry-pick에서 충돌이 발생하면 어떻게 하나요? 각 파일의 충돌을 해결하고 스테이징한 다음 git cherry-pick --continue를 실행하세요. 취소하려면 git cherry-pick --abort를 사용하세요.

커밋 여러 개를 cherry-pick할 수 있나요? 네. 적용할 순서대로 여러 ID를 git cherry-pick에 지정하거나, 양 끝 커밋에 어떤 내용이 포함되는지 확인한 뒤 커밋 범위를 사용할 수 있습니다.

reset과 revert는 같은 작업인가요? 아닙니다. git reset은 브랜치 참조를 이동하며 로컬 파일을 교체할 수도 있습니다. git revert는 이전 변경 사항을 되돌리는 새 커밋을 기록합니다.