Git 브랜치가 Main 에 완전히 병합되었는지 확인하는 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 Git 브랜치가 다른 브랜치, 특히 main 브랜치에 완전히 병합되었는지 효과적으로 확인하는 방법을 배우게 됩니다. 이는 깨끗하고 체계적인 Git 저장소를 유지하는 데 필수적인 기술입니다.

먼저, git branch --merged main 명령을 사용하여 main에 완전히 통합된 브랜치를 식별하는 것으로 시작합니다. 그 다음, git log main ^branch 명령을 사용하여 대상 브랜치의 모든 커밋이 main에 존재하는지 확인하여 결과를 검증합니다. 마지막으로, 부분적으로 병합된 브랜치로 이러한 방법을 테스트하여 다양한 결과를 이해합니다.

git branch --merged main 사용

이 단계에서는 git branch --merged 명령을 사용하여 다른 브랜치에 완전히 통합된 브랜치를 확인하는 방법을 배우겠습니다. 이는 저장소를 깨끗하고 체계적으로 유지하는 데 매우 유용한 명령입니다.

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

cd ~/project/my-time-machine

이제 feature-branch라는 새 브랜치를 만들고 해당 브랜치로 전환해 보겠습니다. 이 브랜치에서 몇 가지 변경 사항을 만드는 것을 시뮬레이션합니다.

git branch feature-branch
git checkout feature-branch
echo "Adding a new feature" >> feature.txt
git add feature.txt
git commit -m "Add new feature"

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

[feature-branch a1b2c3d] Add new feature
 1 file changed, 1 insertion(+)
 create mode 100644 feature.txt

이제 master 브랜치로 다시 전환하고 feature-branch를 병합해 보겠습니다.

git checkout master
git merge feature-branch

성공적인 병합을 나타내는 출력을 볼 수 있습니다.

Updating e1f2g3h..a1b2c3d
Fast-forward
 feature.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 feature.txt

이제 feature-branchmaster에 병합했으므로 git branch --merged를 사용하여 어떤 브랜치가 이제 master에 완전히 병합되었는지 확인해 보겠습니다.

git branch --merged master

이 명령은 모든 커밋이 master 브랜치에 포함된 모든 브랜치를 나열합니다. masterfeature-branch가 모두 나열되어 feature-branch가 이제 master에 완전히 병합되었음을 나타냅니다.

어떤 브랜치가 병합되었는지 이해하는 것은 저장소를 깔끔하게 유지하면서 안전하게 삭제할 수 있는 브랜치를 식별하는 데 도움이 되므로 중요합니다. 마치 게임에서 완료한 사이드 퀘스트를 알고 이제 무시할 수 있는 것과 같습니다.

git log main ^branch 로 확인

이전 단계에서는 git branch --merged를 사용하여 어떤 브랜치가 master에 병합되었는지 확인했습니다. 이제 다른 명령인 git log를 사용하여 다른 관점에서 이를 확인해 보겠습니다. main ^branch 구문을 사용하는 git log 명령은 main에는 있지만 branch에는 없는 커밋을 확인하는 강력한 방법입니다.

먼저, my-time-machine 디렉토리에 있는지 확인합니다.

cd ~/project/my-time-machine

이제 git log를 사용하여 master에는 있지만 feature-branch에는 없는 커밋을 확인해 보겠습니다.

git log master ^feature-branch

이전 단계에서 feature-branchmaster에 완전히 병합했으므로 feature-branch의 모든 커밋도 이제 master에 있습니다. 따라서 이 명령은 병합 전에 원래 master 브랜치에만 있던 커밋을 표시해야 합니다. feature-branch에서 만든 "Add new feature" 커밋은 표시되지 않아야 합니다.

다음과 유사한 출력을 볼 수 있으며, master 브랜치의 초기 커밋만 표시합니다.

commit e1f2g3h4i5j6k7l8m9n0o1p2q3r4s5t6u7v8w9x (HEAD -> master)
Author: Jane Doe <jane.doe@example.com>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

feature-branch가 완전히 병합되지 않았다면 이 명령은 master에 있지만 feature-branch에는 없는 커밋과 feature-branch에 있지만 master에는 없는 커밋을 모두 표시합니다. "Add new feature" 커밋이 여기에 표시되지 않는 사실은 이제 master에 존재함을 확인합니다.

git log main ^branch 구문은 한 브랜치의 모든 커밋이 다른 브랜치에 있는지 시각적으로 확인하는 좋은 방법입니다. 저장소의 서로 다른 브랜치 간의 관계를 이해하는 데 도움이 됩니다.

부분 병합된 브랜치로 테스트

이전 단계에서는 git branch --mergedgit log main ^branch가 완전히 병합된 브랜치에서 어떻게 작동하는지 살펴보았습니다. 이제 일부 커밋은 다른 브랜치에 통합되었지만 모든 커밋이 통합되지는 않은, 즉 부분적으로 병합된 브랜치에서 어떤 일이 발생하는지 살펴보겠습니다.

먼저, my-time-machine 디렉토리에 있는지 확인합니다.

cd ~/project/my-time-machine

partial-feature라는 새 브랜치를 만들고 해당 브랜치로 전환해 보겠습니다.

git branch partial-feature
git checkout partial-feature

이제 이 새 브랜치에서 두 개의 커밋을 만들겠습니다.

echo "Adding part 1 of the feature" >> partial.txt
git add partial.txt
git commit -m "Add part 1"
echo "Adding part 2 of the feature" >> partial.txt
git add partial.txt
git commit -m "Add part 2"

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

[partial-feature a1b2c3d] Add part 1
 1 file changed, 1 insertion(+)
 create mode 100644 partial.txt
[partial-feature e1f2g3h] Add part 2
 1 file changed, 1 insertion(+)

이제 master 브랜치로 다시 전환하고 partial-feature에서 첫 번째 커밋만 병합해 보겠습니다. git cherry-pick을 사용하여 이 작업을 수행할 수 있습니다. 먼저 "Add part 1" 커밋의 커밋 해시가 필요합니다. git log partial-feature를 실행하고 첫 번째 커밋의 해시를 복사하여 찾을 수 있습니다.

git checkout master
## <commit_hash>를 "Add part 1" 커밋의 실제 해시로 바꿉니다.
git cherry-pick <commit_hash>

체리 픽이 성공했음을 나타내는 출력을 볼 수 있습니다.

[master i1j2k3l] Add part 1
 Date: Mon Aug 7 10:05:00 2023 +0000
 1 file changed, 1 insertion(+)
 create mode 100644 partial.txt

이제 git branch --merged master를 다시 사용해 보겠습니다.

git branch --merged master

masterfeature-branch가 나열되지만 partial-feature나열되지 않습니다. 이는 partial-feature에 아직 master에 병합되지 않은 "Add part 2" 커밋이 있기 때문입니다. git branch --merged모든 커밋이 대상 브랜치에 있는 브랜치만 나열합니다.

마지막으로 git log master ^partial-feature를 사용해 보겠습니다.

git log master ^partial-feature

이 명령은 master에는 있지만 partial-feature에는 없는 커밋을 표시합니다. master의 초기 커밋, "Add new feature" 커밋 (이제 master 에 있음), "Add part 1" 커밋 (체리 픽한 커밋) 을 표시해야 합니다. "Add part 2" 커밋은 partial-feature에만 있으므로 표시되지 않아야 합니다.

이는 git branch --mergedgit log main ^branch가 일부 커밋만 통합된 경우에도 브랜치의 병합 상태를 이해하는 데 어떻게 도움이 되는지 보여줍니다.

요약

이 랩에서는 Git 브랜치가 다른 브랜치, 특히 main (또는 master) 에 완전히 병합되었는지 확인하는 방법을 배웠습니다. 먼저, 커밋이 main 브랜치에 완전히 통합된 모든 브랜치를 나열하는 git branch --merged main 명령을 사용했습니다. 이는 정리할 준비가 된 브랜치를 식별하는 빠른 방법입니다.

그런 다음 git log main ^branch를 사용하여 보다 세분화된 확인 방법을 탐구했습니다. 이 명령은 main에는 있지만 지정된 브랜치에는 없는 커밋을 표시합니다. 이 명령이 출력을 반환하지 않으면 브랜치의 모든 커밋이 main에 있음을 확인하여 완전한 병합을 검증합니다. 마지막으로, 부분적으로 병합된 브랜치로 이러한 방법을 테스트하여 출력의 차이점을 이해하고 브랜치의 병합 상태를 정확하게 결정하는 방법에 대한 이해를 더욱 공고히 했습니다.