Git 브랜치에 푸시되지 않은 커밋이 있는지 확인하는 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 로컬 Git 브랜치에 아직 원격 저장소로 푸시되지 않은 커밋이 있는지 확인하는 방법을 배우게 됩니다. 먼저 git status 명령을 사용하여 브랜치가 원격 저장소보다 앞서 있는지 확인하는 것부터 시작하여, 푸시되지 않은 커밋을 식별하는 다양한 방법을 살펴볼 것입니다.

그런 다음, git log 명령을 특정 인자와 함께 사용하여 로컬에는 있지만 원격 추적 브랜치에는 없는 커밋을 나열하는 방법을 배우게 됩니다. 마지막으로, 로컬 브랜치를 원격 저장소와 비교하여 이 정보를 확인하는 방법을 논의할 것입니다. 이 랩을 마치면 로컬 변경 사항을 푸시해야 하는지 쉽게 판단할 수 있는 기술을 갖추게 될 것입니다.

git status 를 사용하여 앞선 커밋 확인하기

이 단계에서는 git status 명령을 사용하여 로컬 브랜치에 원격 브랜치보다 앞선 커밋이 있는지 확인하는 방법을 배우겠습니다. 이는 로컬에서 변경 사항을 만들었지만 아직 원격 저장소로 푸시하지 않은 경우에 흔히 발생하는 시나리오입니다.

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

cd ~/project/my-time-machine

이제 새 파일을 만들고 내용을 추가해 보겠습니다. 이 파일의 이름을 future_plans.txt라고 하겠습니다.

echo "Plan for world domination." > future_plans.txt

다음으로, 이 새 파일을 스테이징하여 커밋을 준비해야 합니다.

git add future_plans.txt

이제 변경 사항을 설명하는 메시지와 함께 커밋을 생성해 보겠습니다.

git commit -m "Add future plans"

다음과 유사한 출력이 표시되어 새 커밋이 생성되었음을 나타냅니다.

[master abcdefg] Add future plans
 1 file changed, 1 insertion(+)
 create mode 100644 future_plans.txt

이제 로컬 master 브랜치에 새 커밋을 만들었습니다. 그러나 이 커밋은 로컬에만 존재하며 어떤 원격 저장소로도 전송되지 않았습니다.

git status를 사용하여 현재 저장소의 상태를 확인해 보겠습니다.

git status

이제 출력은 로컬 브랜치가 원격 브랜치보다 앞서 있음을 보여줍니다 (이 기본 예제에서는 구성하지 않았지만 Git 은 여전히 힌트를 제공합니다).

On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   future_plans.txt

nothing to commit, working tree clean

여기서 중요한 줄은 Your branch is ahead of 'origin/master' by 1 commit.입니다. 이는 로컬 master 브랜치에 origin/master 브랜치 (Git 이 예상하는 원격 브랜치의 기본 이름) 에 없는 커밋이 하나 있음을 알려줍니다.

이것은 매우 유용한 정보입니다. 아직 다른 사람과 공유되지 않은 로컬 변경 사항이 있음을 알려줍니다. 원격 저장소가 있는 실제 시나리오에서는 변경 사항을 git push해야 함을 나타냅니다.

git log --oneline @{u}..HEAD 실행

이전 단계에서 git status가 로컬 브랜치가 원격 브랜치보다 앞서 있는지 알려주는 방법을 살펴보았습니다. 이제 git log 명령을 특수한 구문과 함께 사용하여 정확히 어떤 커밋이 앞서 있는지 확인해 보겠습니다.

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

사용할 명령은 git log --oneline @{u}..HEAD입니다. 이 명령을 자세히 살펴보겠습니다.

  • git log: 커밋 기록을 보기 위한 명령입니다.
  • --oneline: 이 옵션은 각 커밋을 한 줄에 표시하여 출력을 간결하고 읽기 쉽게 만듭니다.
  • @{u}: 이는 업스트림 브랜치를 참조하는 특수 구문입니다. 이 경우, 업스트림 브랜치를 명시적으로 설정하지 않았으므로 Git 은 기본적으로 origin/master를 사용합니다 (여기서 origin은 원격 저장소의 이름이고 master는 브랜치라고 가정합니다).
  • ..HEAD: 이는 범위 표기법입니다. HEAD는 현재 브랜치의 맨 위 (로컬 master) 를 나타냅니다. @{u}..HEAD 범위는 "HEAD 에서 도달할 수 있지만 @{u}에서 도달할 수 없는 커밋을 표시"를 의미합니다. 더 간단히 말하면, 로컬 브랜치에 있지만 업스트림 원격 브랜치에는 없는 커밋을 표시합니다.

이제 명령을 실행해 보겠습니다.

git log --oneline @{u}..HEAD

다음과 유사한 출력이 표시됩니다.

abcdefg (HEAD -> master) Add future plans

이 출력은 이전 단계에서 생성한 커밋 (Add future plans) 을 보여줍니다. 고유 식별자 (abcdefg) 는 터미널에서 다를 수 있지만 커밋 메시지는 일치해야 합니다.

이 명령은 원격 저장소로 푸시하려는 정확한 커밋을 확인하는 데 매우 유용합니다. 아직 공유되지 않은 로컬에서 변경한 사항의 명확한 목록을 제공합니다.

이 출력을 이전 단계의 git status 출력과 비교하면 git status는 앞선 커밋의 를 알려주고, git log @{u}..HEAD는 앞선 특정 커밋을 알려줍니다. 두 명령 모두 원격 저장소에 대한 로컬 저장소의 상태에 대한 귀중한 정보를 제공합니다.

원격 비교를 통한 확인

실제 시나리오에서는 일반적으로 로컬 저장소가 연결된 원격 저장소 (GitHub, GitLab 또는 Bitbucket 등) 가 있습니다. 이 랩 환경에서는 푸시할 라이브 원격 저장소가 없습니다. 그러나 우리가 배운 명령을 사용하여 로컬 브랜치를 원격 브랜치와 비교하는 개념을 시뮬레이션할 수 있습니다.

우리는 이미 git statusgit log --oneline @{u}..HEAD를 사용하여 로컬 브랜치에 있지만 시뮬레이션된 업스트림 브랜치 (origin/master) 에는 없는 커밋을 확인했습니다.

git status의 출력을 다시 검토해 보겠습니다.

git status

여전히 브랜치가 앞서 있음을 나타내는 줄이 표시되어야 합니다.

On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

... (rest of the output)

그리고 git log --oneline @{u}..HEAD의 출력:

git log --oneline @{u}..HEAD

이것은 우리가 만든 단일 커밋을 표시해야 합니다.

abcdefg (HEAD -> master) Add future plans

이 두 명령은 함께 작동하여 로컬 브랜치와 구성된 업스트림 브랜치 간의 차이점을 명확하게 보여줍니다. git status는 요약을 제공하고, git log @{u}..HEAD는 특정 커밋의 세부 정보를 제공합니다.

실제 프로젝트에서는 이 출력을 확인한 후 일반적으로 git push를 실행하여 로컬 커밋을 원격 저장소로 보내 다른 사용자가 사용할 수 있도록 하고 원격 브랜치를 업데이트합니다.

이 랩에서는 푸시할 원격 저장소가 없으므로 git statusgit log를 사용하여 원격 브랜치보다 앞선 커밋을 식별하는 방법을 이해하는 목표를 성공적으로 완료했습니다.

이 기술은 다른 사람과 협업하고 로컬 및 원격 저장소를 동기화하는 데 필수적입니다. 상태 및 로그를 정기적으로 확인하여 보류 중인 변경 사항을 파악하고 준비가 되면 푸시할 수 있습니다.

요약

이 랩에서는 Git 브랜치에 푸시되지 않은 커밋이 있는지 확인하는 방법을 배웠습니다. 로컬 커밋을 만든 후 git status 명령을 사용하여 시작했습니다. git status의 출력은 로컬 브랜치가 원격 브랜치보다 "앞서" 있는지, 그리고 몇 개의 커밋만큼 앞서 있는지 명확하게 나타내어 푸시되지 않은 변경 사항이 있는지 직접적으로 확인할 수 있는 방법을 제공합니다.

그런 다음 git log --oneline @{u}..HEAD를 사용하여 로컬 브랜치에 있지만 원격 추적 브랜치에는 없는 특정 커밋에 대한 보다 자세한 보기를 얻는 방법을 탐구했습니다. 이 명령은 푸시되지 않은 커밋의 커밋 해시와 메시지를 나열하여 보류 중인 변경 사항을 정확하게 식별하는 방법을 제공합니다. 마지막으로, 로컬 및 원격 브랜치를 비교하여 이를 확인하는 개념을 논의하여 푸시되지 않은 커밋의 존재를 확인하는 방법에 대한 이해를 강화했습니다.