Git 기록의 이해

Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019

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

참고 항목

Git 기록에서 변경한 내용을 찾을 수 없는 경우 Git에서 Git 기록 단순화가 어떻게 작동하는지 에 대해 자세히 알아보세요. Git의 기록 단순화를 살펴보세요.

커밋 기록 기본 사항

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

한 줄에 세 개의 커밋

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

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

git pull origin main

이 복사본("pulls")은 원격 리포지토리의 분기(기본적으로 호출 origin 됨)에서 main 로컬 리포지토리의 분기로 main 모든 커밋을 복사합니다. 끌어오기 작업은 하나의 새 커밋을 복사했으며 main 로컬 리포지토리의 분기가 이제 이 새 커밋을 가리키고 있습니다.

네 번째 커밋 D가 줄에 추가됨

분기 기록 이해

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

git checkout -b cool-new-feature

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

Branch cool-new-feature가 추가됨

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

두 개의 새 커밋이 추가됨

내 커밋은 해당 분기에서 만든 이후 분기에서 연결할 수 cool-new-feature 있습니다. 내 기능을 완료하고 이 기능을 .에 main병합하려고 합니다. 이렇게 하려면 다음 명령을 사용합니다.

git merge cool-feature main

병합 후

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

실제 세계의 역사

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

git 그래프의 콘솔 로그

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