다음을 통해 공유


Git 기록 이해

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Git은 기록을 전체 리포지토리의 스냅샷 그래프(커밋이라고 함)로 저장합니다. 각 커밋에는 하나 이상의 이전 커밋에 대한 포인터도 포함됩니다. 커밋에는 여러 부모가 있을 수 있으며 직선 대신 그래프처럼 보이는 기록을 만들 수 있습니다. 이러한 역사의 차이는 매우 중요하며 사용자가 Git을 혼란스럽게 하는 주된 이유입니다.

비고

Git 기록에서 본인이 변경했었던 내용을 찾을 수 없는 경우, "Git에서 변경 내용이 손실됨: Git의 기록 단순화"에 대해 자세히 알아보세요. Git 기록 단순화가 작동하는 방식을살펴보세요.

커밋 기록 기본 사항

간단한 기록 예제로 시작합니다. 선형 커밋이 3개인 리포지토리입니다.

줄에 세 개의 커밋

커밋 A는 커밋 B의 부모이며 커밋 B는 커밋 C의 부모입니다. 이 기록은 CVCS와 매우 유사합니다. C 커밋을 가리키는 화살표는 분기입니다. Git 리포지토리의 mainline 분기에 대한 기본 이름이기 때문에 main 이름이 지정됩니다. 분기는 특정 커밋에 대한 포인터이므로 Git에서 분기가 매우 가볍고 쉽습니다.

CVCS에 비해 Git의 주요 차이점은 리포지토리의 전체 복사본이 있다는 것입니다. 원격 리포지토리에서 최신 커밋을 가져오면 로컬 리포지토리를 원격 리포지토리와 동기화 상태로 유지해야 합니다. 이렇게 하려면 다음 명령을 사용하여 메인 브랜치를 가져오겠습니다.

git pull origin main

이 명령은 원격 리포지토리의 main 브랜치(기본 명칭은 origin)에서 로컬 리포지토리의 main 브랜치로 모든 커밋을 끌어옵니다. 끌어오기 작업은 하나의 새 커밋을 복사했으며 로컬 리포지토리의 main 분기는 이제 이 새 커밋을 가리키고 있습니다.

네 번째 커밋 D가 줄 추가됩니다.

분기 히스토리 이해하기

이제 코드를 변경하려고 합니다. 여러 기능을 병렬로 작업하는 여러 활성 분기가 있는 것이 일반적입니다. 이는 새 분기가 무겁고 거의 생성되지 않는 CVCS와는 극명한 대조를 이룹니다. 첫 번째 단계는 다음 명령을 사용하여 새 브랜치로 이동하는 것입니다.

git checkout -b cool-new-feature

두 명령을 결합하는 바로 가기입니다. git branch cool-new-feature 분기를 만든 다음 git checkout cool-new-feature 분기에서 작업을 시작합니다.

분기 멋진 새 기능이 추가됨

이제 두 분기가 동일한 커밋을 가리킵니다. 제가 cool-new-feature 분기에서 두 개의 새 커밋인 E와 F를 통해 몇 가지 변경을 하겠습니다.

두 개의 새 커밋을 추가했습니다.

제가 그 브랜치에서 커밋을 만들었으므로 cool-new-feature 브랜치에서 제 커밋은 도달 가능합니다. 제 기능을 완료하고 제 기능을 main에 병합하려고 합니다. 이렇게 하려면 다음 명령을 사용합니다.

git merge cool-feature main

병합 후

병합이 있을 때 기록의 그래프 구조가 표시됩니다. 내 분기를 다른 분기에 병합할 때 Git에서 새 커밋을 만듭니다. 병합 커밋입니다. 충돌이 없으므로 이 병합 커밋에는 변경 내용이 포함되지 않습니다. 충돌이 있는 경우 병합 커밋에는 이러한 충돌을 해결하는 데 필요한 변경 내용이 포함됩니다.

실제 세계의 역사

다음은 팀의 활성 개발에서 코드와 더 유사한 Git 기록의 예입니다. 거의 같은 시간에 자신들의 분기에서 메인 분기로 커밋을 병합하는 세 사람이 있습니다.

git 그래프 콘솔 로그

분기와 병합이 그래프의 모양을 만드는 방법을 이해했으므로 너무 무섭지 않아야 합니다.