소개
이 랩에서는 로컬 Git 브랜치가 원격 브랜치와 어떻게 달라졌는지 (diverged) 확인하는 방법을 배우게 됩니다. 이는 협업 개발과 프로젝트 변경 사항을 최신 상태로 유지하는 데 필수적인 기술입니다.
먼저, 시뮬레이션된 원격 저장소에서 업데이트를 가져오고 git status를 사용하여 로컬 브랜치가 뒤쳐져 있는지 확인하는 것으로 시작합니다. 그 후, git log를 사용하여 로컬 브랜치와 원격 브랜치 간의 커밋을 비교하는 방법을 살펴보고, 마지막으로 git diff @{u} HEAD를 사용하여 분기 (divergence) 를 확인합니다.
git fetch 실행 및 git status 로 분기 확인
이 단계에서는 로컬에 없는 원격 저장소의 변경 사항이 있는지 확인하는 방법을 배우겠습니다. 이는 다른 사람들과 협업하거나 다른 곳에서 업데이트되는 프로젝트를 작업할 때 매우 중요합니다.
먼저, 몇 가지 변경 사항이 있는 원격 저장소를 시뮬레이션해 보겠습니다. 실제 시나리오에서는 GitHub 또는 GitLab 과 같은 플랫폼에서 호스팅되는 저장소가 될 것입니다. 이 랩에서는 로컬 디렉토리를 "원격"으로 사용합니다.
아직 해당 디렉토리에 있지 않다면, 프로젝트 디렉토리로 다시 이동합니다.
cd ~/project/my-time-machine
이제 시뮬레이션된 원격 저장소에서 최신 변경 사항을 가져오겠습니다. git fetch 명령을 사용합니다. 이 명령은 원격 저장소에서 커밋, 파일 및 참조를 로컬 저장소로 다운로드합니다. 현재 브랜치에 병합하지는 않습니다.
git fetch origin
새로운 변경 사항이 없으면 출력이 많이 보이지 않을 수 있습니다. 그러나 git fetch는 로컬 저장소에서 원격 브랜치에 대한 정보를 업데이트합니다.
다음으로, git status를 사용하여 로컬 브랜치가 원격 브랜치보다 뒤쳐져 있는지 확인합니다. git status 명령은 저장소의 현재 상태를 보여주는 창입니다. 스테이징된 파일, 스테이징되지 않은 파일, 추적되지 않은 파일에 대한 정보를 제공하며, 현재 브랜치와 업스트림 브랜치 간의 관계에 대한 정보도 제공합니다.
git status 명령을 실행합니다.
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
이 메시지는 로컬 master 브랜치가 origin/master 브랜치 (master 브랜치의 원격 버전) 보다 한 개의 커밋 뒤쳐져 있음을 알려줍니다. 또한, 나중에 랩에서 다룰 git pull을 사용하여 로컬 브랜치를 업데이트하라고 제안합니다.
fetch 후 git status의 출력을 이해하는 것은 중요합니다. 이를 통해 로컬 작업에 통합하기 전에 원격 저장소에서 사용할 수 있는 새로운 변경 사항이 있는지 알 수 있습니다. 이는 잠재적인 충돌을 방지하고 프로젝트 진행 상황에 대한 정보를 얻는 데 도움이 됩니다.
git log 를 사용하여 커밋 비교
이전 단계에서는 git status를 사용하여 로컬 브랜치가 원격 브랜치보다 뒤쳐져 있는지 확인했습니다. 이제 git log를 사용하여 원격 브랜치에 있지만 로컬 브랜치에는 없는 실제 커밋을 확인해 보겠습니다.
git log 명령은 매우 다재다능합니다. 다양한 방식으로 커밋 기록을 볼 수 있습니다. 로컬 브랜치 (HEAD) 를 원격 추적 브랜치 (origin/master) 와 비교하려면 다음 구문을 사용할 수 있습니다.
git log HEAD..origin/master
~/project/my-time-machine 디렉토리에 있는지 확인합니다.
cd ~/project/my-time-machine
이제 git log 명령을 실행하여 브랜치를 비교합니다.
git log HEAD..origin/master
로컬 HEAD (현재 로컬 master 브랜치를 가리킴) 에 없는 커밋이 origin/master에 있는 경우, 이 명령은 해당 커밋을 나열합니다. 출력은 origin/master에 있지만 현재 브랜치에는 없는 각 커밋에 대한 커밋 해시, 작성자, 날짜 및 커밋 메시지를 포함한 커밋 세부 정보를 표시합니다.
예를 들어, 원격 저장소에 새로운 커밋이 하나 있는 경우, 출력은 다음과 같을 수 있습니다.
commit abcdef1234567890abcdef1234567890abcdef (origin/master)
Author: Another User <another.user@example.com>
Date: Tue Aug 8 10:00:00 2023 +0000
Add a new feature
이 출력은 원격 저장소에 있지만 로컬에는 없는 커밋을 명확하게 보여줍니다. HEAD..origin/master 구문은 Git 에게 origin/master에서 도달할 수 있지만 HEAD에서는 도달할 수 없는 커밋을 표시하도록 지시합니다.
이러한 방식으로 git log를 사용하는 것은 브랜치 간의 차이점을 이해하고 로컬 브랜치를 업데이트할 경우 정확히 어떤 변경 사항을 얻게 될지 확인하는 강력한 도구입니다. git status보다 분기를 유발하는 특정 커밋에 대한 자세한 정보를 제공합니다.
페이저에서 열리는 경우, 로그 보기를 종료하려면 q를 누르는 것을 잊지 마세요.
git diff @{u} HEAD 로 확인
이전 단계에서는 git status를 사용하여 로컬 브랜치가 원격 브랜치보다 뒤쳐져 있는지 확인하고, git log를 사용하여 다른 커밋을 확인했습니다. 이제 git diff를 사용하여 원격 브랜치의 해당 커밋이 로컬 브랜치에 도입한 실제 코드 변경 사항을 확인해 보겠습니다.
git diff 명령은 Git 기록의 두 지점 간의 차이점을 보여줍니다. 이를 사용하여 현재 로컬 브랜치 (HEAD) 를 업스트림 브랜치와 비교할 수 있습니다. 업스트림 브랜치는 로컬 브랜치가 추적하는 원격 저장소의 브랜치입니다. 이 경우, master의 업스트림 브랜치는 origin/master입니다. Git 은 업스트림 브랜치에 대한 편리한 단축키를 제공합니다: @{u} 또는 @{upstream}.
~/project/my-time-machine 디렉토리에 있는지 확인합니다.
cd ~/project/my-time-machine
이제 git diff 명령을 실행하여 로컬 브랜치와 업스트림 브랜치 간의 차이점을 확인합니다.
git diff @{u} HEAD
이 명령은 현재 커밋 (HEAD) 의 파일과 업스트림 브랜치 (@{u}) 의 최신 커밋의 파일 간의 줄 단위 차이점을 보여줍니다.
아직 가져오지 않은 원격 저장소의 변경 사항이 있는 경우, 출력은 해당 차이점을 표시합니다. 예를 들어, 원격 저장소의 message.txt에 줄이 추가된 경우, 출력은 다음과 같을 수 있습니다.
diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
Hello, Future Me
+This is a new line from the remote.
+ 기호는 업스트림 브랜치 (@{u}) 에 있지만 로컬 브랜치 (HEAD) 에는 없는 줄을 나타냅니다.
git diff @{u} HEAD를 사용하는 것은 로컬 브랜치에 병합하기 전에 원격 저장소에 있는 변경 사항을 미리 볼 수 있는 강력한 방법입니다. 이를 통해 정확히 어떤 수정 사항이 이루어졌는지 이해할 수 있으며, 이는 코드 검토 또는 단순히 프로젝트의 발전에 대한 정보를 얻는 데 매우 유용합니다.
페이저에서 열리는 경우, diff 보기를 종료하려면 q를 누르세요.
요약
이 Lab 에서는 로컬 Git 브랜치가 원격 브랜치와 분기되었는지 확인하는 방법을 배웠습니다. 먼저, 원격 저장소를 시뮬레이션하고 git fetch를 사용하여 병합하지 않고 최신 변경 사항을 검색하는 것으로 시작했습니다. 그 후, git status를 사용하여 로컬 브랜치가 원격 브랜치보다 뒤쳐져 있는지 빠르게 식별했습니다. 이는 "Your branch is behind 'origin/master' by X commit"과 같은 메시지로 표시됩니다.
git status를 사용한 초기 확인 후, 브랜치를 비교하는 더 자세한 방법을 탐구했습니다. 커밋 기록을 시각화하고 로컬 및 원격 브랜치 간의 차이점을 식별하기 위해 다양한 옵션과 함께 git log를 사용하는 방법을 배웠습니다. 마지막으로, 업스트림 브랜치와 현재 HEAD 간의 변경 사항을 정확하게 비교하여 분기를 명확하게 보여주는 git diff @{u} HEAD의 유용성을 발견했습니다.



