Git 브랜치 동기화 확인 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 Git 브랜치가 다른 브랜치와 동기화되었는지 확인하는 방법을 배우게 됩니다. 이는 프로젝트의 히스토리를 관리하고 브랜치가 최신 상태인지 확인하는 데 필수적인 기술입니다.

이를 달성하기 위해 세 가지 다른 방법을 살펴볼 것입니다: git log를 사용하여 커밋 히스토리를 비교하고, git diff를 사용하여 브랜치 간의 차이점을 식별하며, 마지막으로 git merge-base를 사용하여 브랜치 간의 관계를 확인합니다. 이 랩을 마치면 Git 브랜치의 동기화 상태를 자신 있게 결정할 수 있는 실용적인 기술을 갖추게 될 것입니다.

git log 를 사용하여 커밋 비교하기

이 단계에서는 git log 명령을 사용하여 프로젝트 히스토리에서 서로 다른 커밋을 비교하는 방법을 배우겠습니다. 이는 타임머신의 서로 다른 스냅샷을 보고 그 사이에서 어떻게 변경되었는지 확인하는 것과 같습니다.

먼저, 프로젝트 디렉토리에 있는지 확인해 보겠습니다. 터미널을 열고 my-time-machine 폴더로 이동합니다:

cd ~/project/my-time-machine

이제 새 파일을 만들고 커밋을 해보겠습니다. 이렇게 하면 첫 번째 커밋과 비교할 수 있는 또 다른 히스토리 지점이 생깁니다.

echo "This is the second message." > second_message.txt
git add second_message.txt
git commit -m "Add a second message file"

커밋 후 다음과 유사한 출력을 볼 수 있습니다:

[master a1b2c3d] Add a second message file
 1 file changed, 1 insertion(+)
 create mode 100644 second_message.txt

이제 히스토리에 두 개의 커밋이 있습니다. 로그를 다시 보겠습니다:

git log

가장 최신 커밋이 맨 위에 있는 두 개의 커밋 항목을 볼 수 있습니다. 각 커밋에는 고유한 식별자 (긴 문자열) 가 있습니다.

두 개의 특정 커밋을 비교하려면 범위 구문 commit1..commit2와 함께 git log를 사용할 수 있습니다. 이는 commit2에서 도달할 수 있지만 commit1에서는 도달할 수 없는 커밋을 보여줍니다.

두 커밋의 커밋 ID 를 찾아보겠습니다. git log --oneline 출력에서 짧은 ID 를 얻을 수 있습니다. 예를 들어, 첫 번째 커밋 ID 가 a1b2c3d이고 두 번째 커밋 ID 가 e4f5g6h인 경우 해당 ID 를 사용합니다.

git log --oneline

예시 출력:

e4f5g6h (HEAD -> master) Add a second message file
a1b2c3d Send a message to the future

이제 첫 번째 커밋 (a1b2c3d) 과 두 번째 커밋 (e4f5g6h) 사이의 프로젝트 상태를 비교해 보겠습니다. 예시 ID 를 실제 커밋 ID 로 바꿉니다:

git log a1b2c3d..e4f5g6h

이 명령은 ID 가 a1b2c3d인 커밋 이후부터 ID 가 e4f5g6h인 커밋까지 포함하여 이루어진 커밋을 보여줍니다. 이 경우 두 번째 커밋을 표시해야 합니다.

git log를 사용하여 커밋을 비교하는 방법을 이해하는 것은 프로젝트 히스토리를 탐색하는 데 매우 중요합니다. 이를 통해 변경 시퀀스를 확인하고 코드베이스의 진화를 이해할 수 있습니다.

git diff branch1 branch2 실행

이전 단계에서는 git log를 사용하여 히스토리의 서로 다른 부분에 어떤 커밋이 있는지 확인했습니다. 이제 git diff 명령을 사용하여 두 개의 서로 다른 시점 또는 서로 다른 브랜치 간의 실제 변경 사항을 확인해 보겠습니다. 이는 타임머신의 두 버전을 비교하여 정확히 어떤 부분이 추가, 제거 또는 수정되었는지 확인하는 것과 같습니다.

먼저, 프로젝트 디렉토리에 있는지 확인합니다:

cd ~/project/my-time-machine

현재 master 브랜치 하나만 있습니다. 브랜치 비교를 시연하기 위해 feature-branch라는 새 브랜치를 만들어 보겠습니다. 브랜치를 메인 타임라인 (master) 에 영향을 주지 않고 새로운 기능이나 실험을 수행할 수 있는 대체 타임라인이라고 생각하십시오.

git branch feature-branch

이제 새 브랜치로 전환해 보겠습니다:

git checkout feature-branch

브랜치가 전환되었음을 나타내는 출력을 볼 수 있습니다:

Switched to branch 'feature-branch'

이 새 브랜치에서 message.txt 파일을 변경해 보겠습니다:

echo "Adding a line on the feature branch." >> message.txt

이 명령은 message.txt 파일에 새 줄을 추가합니다.

이제 이 변경 사항을 feature-branch에서 커밋해 보겠습니다:

git add message.txt
git commit -m "Add a line to message.txt on feature branch"

커밋 후 다음과 유사한 출력을 볼 수 있습니다:

[feature-branch a1b2c3d] Add a line to message.txt on feature branch
 1 file changed, 1 insertion(+)

이제 서로 다른 커밋 히스토리를 가진 두 개의 브랜치 (masterfeature-branch) 가 있습니다. master 브랜치에는 처음 두 개의 커밋이 있고, feature-branch에는 해당 두 개의 커밋과 방금 만든 새 커밋이 있습니다.

git diff를 사용하여 master 브랜치와 feature-branch 간의 차이점을 확인해 보겠습니다.

git diff master feature-branch

출력은 두 브랜치 간에 다른 정확한 줄을 보여줍니다:

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+Adding a line on the feature branch.

이 출력은 message.txt 파일이 다르다는 것을 보여줍니다. +로 시작하는 줄은 master 브랜치와 비교하여 feature-branch에서 추가된 줄을 나타냅니다.

git diff를 사용하는 것은 프로젝트의 서로 다른 버전 또는 서로 다른 브랜치 간에 정확히 어떤 변경 사항이 있었는지 이해하는 데 매우 강력합니다. 병합하기 전에 변경 사항을 검토하고 특정 수정 사항이 발생한 위치를 정확히 찾아내는 데 도움이 됩니다.

q를 눌러 diff 보기를 종료하고 명령줄로 돌아갑니다.

git merge-base 로 확인

이 단계에서는 git merge-base 명령을 살펴보겠습니다. 이 명령은 두 커밋 간의 최상의 공통 조상을 찾는 데 유용합니다. 두 개의 서로 다른 타임라인 (브랜치) 이 분기된 시점을 찾는 것으로 생각하십시오.

먼저, 프로젝트 디렉토리에 있는지 확인합니다:

cd ~/project/my-time-machine

masterfeature-branch 두 개의 브랜치가 있습니다. feature-branchmaster에서 생성되었고, 그 다음 feature-branch에 새 커밋이 추가되었습니다. 이 두 브랜치의 공통 조상은 feature-branch가 생성되기 직전의 master의 커밋입니다.

git merge-base를 사용하여 masterfeature-branch의 공통 조상을 찾아보겠습니다:

git merge-base master feature-branch

이 명령의 출력은 공통 조상의 커밋 ID 가 됩니다. 이는 feature-branch를 만들기 전에 master 브랜치에서 만든 두 번째 커밋의 커밋 ID 여야 합니다.

예시 출력:

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9

(실제 커밋 ID 는 경우에 따라 다릅니다).

이것이 실제로 공통 조상인지 확인하려면 git log --oneline을 사용하여 두 브랜치의 히스토리를 확인하고 커밋 ID 를 시각적으로 확인할 수 있습니다.

git log --oneline --graph --all

이 명령은 모든 브랜치에서 커밋 히스토리의 그래픽 표현을 보여줍니다. masterfeature-branch의 끝에서 히스토리가 수렴하는 지점을 추적할 수 있습니다. git merge-base로 식별된 커밋 ID 는 해당 수렴 지점이어야 합니다.

공통 조상을 이해하는 것은 Git 에서 특히 브랜치를 병합할 준비를 할 때 중요합니다. Git 은 공통 조상을 사용하여 결합해야 하는 변경 사항을 파악합니다.

요약

이 랩에서는 다양한 Git 명령을 사용하여 Git 브랜치가 다른 브랜치와 동기화되었는지 확인하는 방법을 배웠습니다. 먼저 git log를 사용하여 브랜치 간의 커밋을 비교하고, 범위 구문을 사용하여 커밋 히스토리를 보고 차이점을 식별하는 방법을 이해했습니다. 이를 통해 한 브랜치에는 있지만 다른 브랜치에는 없는 커밋을 확인할 수 있었습니다.

다음으로, git diff 명령을 탐색하여 브랜치 간의 실제 내용 차이점을 검사하고, 줄 단위의 변경 사항을 확인했습니다. 마지막으로, git merge-base를 사용하여 두 브랜치의 공통 조상 커밋을 찾아, 한 브랜치가 다른 브랜치에 완전히 포함되어 있는지 확인하는 데 도움을 받았습니다. 이러한 단계는 Git 에서 브랜치 동기화를 확인하는 포괄적인 접근 방식을 제공합니다.