부모 커밋

AI
qwen-3-235b-a22b-instruct-2507
작성자
익명
작성일
2025.09.16
조회수
1
버전
v1

부모 커밋

개요

부모 커(Parent Commit)은 버전 관리 시스템, 특히 Git에서 중요한 개념 중 하나로, 특정 커밋이 생성되기 이전에 존재하던 커밋을 의미합니다. 즉, 각 커밋은 자신의 변경 사항이 기반으로 삼은 하나 이상의 이전 커밋을 부모 커밋으로 가집니다. 이 구조는 Git의 트리 기반 히스토리(commit history)를 형성하는 핵심 요소이며, 코드의 진화 과정을 추적하고 브랜치 병합(Merge) 시 충돌 해결을 가능하게 합니다.

이 문서에서는 부모 커밋의 개념, 작동 원리, 다양한 형태(단일/다중 부모), 그리고 실제 사용 사례를 중심으로 설명합니다.


부모 커밋의 기본 개념

커밋과 부모 관계

Git은 분산형 버전 관리 시스템으로, 모든 변경 사항을 커밋(Commit)이라는 단위로 저장합니다. 각 커밋은 다음과 같은 정보를 포함합니다:

예를 들어, 새로운 커밋 C3를 만들면, 이 커밋은 이전 커밋 C2를 부모로 지정합니다. 이는 C3C2의 상태에서 변경을 가했다는 의미입니다.

C1 ← C2 ← C3

여기서 C3의 부모는 C2, C2의 부모는 C1입니다.


부모 커밋의 종류

1. 단일 부모 커밋 (Single Parent)

가장 일반적인 형태로, 순차적 커밋(linear commit)에서 발생합니다. 브랜치를 새로 만들지 않고, 기존 브랜치에 연속적으로 커밋을 추가할 때 나타납니다.

# 예: main 브랜치에 커밋 추가
git commit -m "기능 추가"

이 경우, 새로 생성된 커밋은 단 하나의 부모를 가집니다.


2. 다중 부모 커밋 (Multiple Parents)

브랜치 병합(Merge) 시 발생합니다. 예를 들어, feature 브랜치를 main 브랜치에 병합하면, 생성된 병합 커밋(Merge Commit)은 두 개의 부모를 가집니다:

  • 첫 번째 부모: main 브랜치의 최신 커밋 (병합 대상)
  • 두 번째 부모: feature 브랜치의 최신 커밋 (병합 소스)

    C3 ← C4 (feature 브랜치)
   /      
C1 ← C2 ← C5 (병합 커밋)
          ↑
    C5는 C2와 C4를 부모로 가짐

이 구조는 Git이 병합 이력을 정확히 추적할 수 있도록 해줍니다.


부모 커밋의 확인 방법

Git 명령어를 통해 부모 커밋 정보를 확인할 수 있습니다.

1. [git show](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B4%80%EB%A6%AC/%EB%B2%84%EC%A0%84%20%EA%B4%80%EB%A6%AC/git%20show) 명령어

특정 커밋의 메타데이터를 출력하며, 부모 커밋의 해시 값을 표시합니다.

git show --pretty=raw <커밋_해시>

출력 예:

commit abc123...
parent def456...  # 첫 번째 부모
parent xyz789...  # 두 번째 부모 (병합 커밋인 경우)
author ...
date ...
...

2. [git log](/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B4%80%EB%A6%AC/%EB%B2%84%EC%A0%84%20%EA%B4%80%EB%A6%AC/git%20log) 명령어

히스토리를 시각화하며 부모 관계를 추적할 수 있습니다.

git log --graph --oneline --all

이 명령어는 브랜치 구조와 부모-자식 관계를 ASCII 그래프로 보여줍니다.


부모 커밋의 활용 사례

1. 코드 변경 이력 추적

부모 커밋을 통해 특정 변경이 어디에서 시작되었는지, 어떤 경로를 거쳐 현재 상태에 도달했는지를 추적할 수 있습니다.

git log --oneline <커밋>^..  # 부모 커밋부터 현재까지의 변경

2. 충돌 해결리버트

병합 충돌이 발생했을 때, 두 부모 커밋을 비교하여 어떤 변경 사항이 충돌했는지 분석할 수 있습니다. 또한, 병합 커밋을 되돌릴 때는 어떤 부모를 기준으로 리버트할지 선택할 수 있습니다.

git revert -m 1 <병합_커밋>  # 첫 번째 부모를 기준으로 되돌림

3. 리베이스와의 비교

리베이스(rebase)는 기존 커밋의 부모를 변경하여 히스토리를 재구성합니다. 이는 병합과 달리 새로운 커밋을 생성하고, 부모를 변경함으로써 선형적인 히스토리를 유지하는 데 유리합니다.


참고 자료


관련 문서

부모 커밋은 Git의 분산적이고 비선형적인 버전 관리 구조를 이해하는 데 필수적인 개념입니다. 이를 정확히 파악함으로써 효과적인 협업과 코드 히스토리 관리가 가능해집니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen-3-235b-a22b-instruct-2507)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?