Git 브랜치가 원격 브랜치보다 뒤쳐졌는지 확인하는 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 로컬 Git 브랜치가 해당 원격 브랜치보다 뒤쳐져 있는지 확인하는 방법을 배우게 됩니다. git fetch를 사용하여 원격 저장소에서 최신 변경 사항을 가져오는 것부터 시작하여 이를 달성하기 위한 필수 단계를 다룰 것입니다.

fetch 이후에는 git status를 사용하여 브랜치가 원격 브랜치보다 뒤쳐져 있는지 빠르게 확인할 수 있습니다. 마지막으로, 원격 브랜치에 존재하지만 로컬 브랜치에는 없는 특정 커밋을 보기 위해 git log HEAD..@{u}를 사용하는 방법을 배우게 됩니다. 이를 통해 차이점에 대한 자세한 이해를 얻을 수 있습니다.

git fetch 로 원격 저장소 가져오기

이 단계에서는 원격 Git 저장소에서 변경 사항을 가져오는 방법을 배우겠습니다. 다른 사람들과 협업하고 있으며, 그들이 프로젝트에 변경 사항을 적용했다고 가정해 봅시다. git fetch는 현재 작업에 병합하지 않고 해당 변경 사항을 로컬 머신으로 다운로드하는 데 사용하는 명령어입니다.

먼저, 원격 저장소를 시뮬레이션해 보겠습니다. 데모 목적으로 로컬에서 간단한 원격 저장소를 만들 것입니다.

cd ~/project
mkdir remote-repo
cd remote-repo
git init --bare

이렇게 하면 일반적으로 중앙 원격 저장소로 사용되는 "bare" 저장소가 생성됩니다. 이제 my-time-machine 저장소로 돌아가서 이것을 원격 저장소로 추가해 보겠습니다.

cd ~/project/my-time-machine
git remote add origin ../remote-repo

origin이라는 이름의 원격 저장소를 추가했으며, 이는 시뮬레이션된 원격 저장소를 가리킵니다. 이제 원격 저장소에서 변경 사항을 만들고 가져와 보겠습니다.

cd ~/project/remote-repo
echo "This is a remote change." > remote_file.txt
git add remote_file.txt
git commit -m "Add remote file"

이제 my-time-machine 저장소로 돌아가서 원격 저장소에서 변경 사항을 가져오겠습니다.

cd ~/project/my-time-machine
git fetch origin

Git 이 원격 저장소에서 변경 사항을 다운로드했음을 나타내는 출력을 볼 수 있습니다. 다음과 유사합니다.

remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 2 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), 258 bytes | 258.00 KiB | elapsed 0.00s.
From ../remote-repo
 * [new branch]      master     -> origin/master

git fetch 명령어는 원격 저장소에서 커밋, 파일 및 참조를 로컬 저장소로 다운로드합니다. 그러나 이러한 변경 사항을 현재 작업 브랜치에 자동으로 병합하지는 않습니다. 이를 통해 통합하기 전에 변경 사항을 검사할 수 있습니다.

git fetch를 최신 뉴스 피드를 가져오는 것으로 생각하십시오. 헤드라인과 요약을 볼 수 있지만 아직 전체 기사를 읽지 않았습니다. 나중에 읽고 싶은 기사 (변경 사항) 를 결정 (병합) 할 수 있습니다.

git status 를 사용하여 뒤쳐짐 상태 확인

이전 단계에서 원격 저장소에서 변경 사항을 가져왔습니다. 이제 git status를 사용하여 로컬 저장소가 원격 저장소와 어떻게 비교되는지 확인해 보겠습니다.

~/project/my-time-machine 디렉토리에 있는지 확인하십시오.

cd ~/project/my-time-machine

이제 git status 명령을 실행합니다.

git status

다음과 유사한 출력을 볼 수 있습니다.

On branch master
Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

이 출력은 몇 가지 중요한 사항을 알려줍니다.

  • "On branch master": 현재 master 브랜치에 있습니다.
  • "Your branch is behind 'origin/master' by 1 commit": 이것이 핵심 메시지입니다! 로컬 master 브랜치가 origin 원격 저장소의 master 브랜치보다 1 개의 커밋 뒤쳐져 있음을 나타냅니다. 즉, 로컬에는 아직 없는 커밋이 원격 저장소에 있다는 의미입니다.
  • "(use "git pull" to update your local branch)": Git 은 로컬 브랜치를 최신 상태로 유지하는 방법에 대한 힌트도 제공합니다.

git status 명령은 저장소의 상태를 보여주는 창입니다. 현재 브랜치가 무엇인지, 커밋되지 않은 변경 사항이 있는지, 현재 브랜치가 업스트림 브랜치 (이 경우 origin/master) 와 어떻게 비교되는지 알려줍니다.

git status의 출력을 이해하는 것은 Git 을 효과적으로 사용하는 데 매우 중요합니다. 원격 저장소에서 변경 사항을 가져와야 하는지, 커밋할 변경 사항이 있는지, 또는 작업 디렉토리가 깨끗한지 여부를 알 수 있도록 도와줍니다.

git log HEAD..@{u}로 뒤쳐진 커밋 확인

이전 단계에서 git status는 로컬 브랜치가 원격 브랜치보다 뒤쳐져 있다고 알려주었습니다. 하지만 어떤 커밋에 뒤쳐져 있는지 어떻게 확인할 수 있을까요?

git log 명령을 특수한 구문과 함께 사용하여 원격 브랜치에 있지만 로컬 브랜치에는 없는 커밋만 표시할 수 있습니다. HEAD..@{u} 구문은 현재 브랜치 (HEAD) 를 업스트림 브랜치 (@{u}, 이 경우 origin/master) 와 비교합니다.

~/project/my-time-machine 디렉토리에 있는지 확인하십시오.

cd ~/project/my-time-machine

이제 다음 명령을 실행합니다.

git log HEAD..@{u}

1 단계에서 원격 저장소에서 만든 커밋에 대한 로그 항목을 볼 수 있습니다.

commit <commit-hash> (origin/master)
Author: Your Name <your.email@example.com>
Date:   <Date and Time>

    Add remote file

이 명령은 원격 저장소에서 pull 할 때 정확히 어떤 변경 사항을 얻게 될지 확인하는 데 매우 유용합니다. 원격 추적 브랜치 (origin/master) 에는 있지만 아직 로컬 브랜치 (master) 에는 없는 커밋 기록을 보여줍니다.

어떤 커밋에 뒤쳐져 있는지 확인하는 방법을 이해하는 것은 협업자의 작업에 최신 상태를 유지하고 병합을 계획하는 데 중요합니다.

로그 보기를 종료하려면 q를 누르십시오.

요약

이 랩에서는 로컬 Git 브랜치가 원격 브랜치보다 뒤쳐져 있는지 확인하는 방법을 배웠습니다. 먼저 git remote add를 사용하여 원격 저장소를 시뮬레이션하고 로컬 프로젝트에 추가하는 것으로 시작했습니다. 그런 다음 git fetch를 사용하여 병합하지 않고 원격 저장소에서 변경 사항을 다운로드하는 연습을 했습니다. 이 명령이 최신 원격 정보로 로컬 저장소를 업데이트하는 방법을 시연했습니다.

fetch 이후에는 일반적으로 git status를 사용하여 현재 브랜치가 원격 추적 브랜치보다 뒤쳐져 있는지 확인하고, git log HEAD..@{u}를 사용하여 원격 저장소에 있지만 아직 로컬 브랜치에는 없는 특정 커밋을 확인합니다. 이러한 단계는 로컬 작업과 원격 저장소 간의 차이점을 명확하게 보여줍니다.