Git 브랜치 기본 조작

GitBeginner
지금 연습하기

소개

다시 만나서 반갑습니다, 시간 여행자님! 이제 Git 브랜치를 사용하여 여러분의 시간 여행 기술을 한 단계 더 높여볼 시간입니다!

메인 타임라인을 망치지 않고도 기발한 아이디어를 마음껏 실험해 볼 수 있는 프로젝트의 평행 우주를 만들 수 있다고 상상해 보세요. 그것이 바로 Git 브랜치가 해주는 일입니다! 브랜치는 코드의 평행 차원과 같아서, 두려움 없이 새로운 기능을 개발하거나 버그를 수정하고, 혹은 미친 듯한 실험을 해볼 수 있는 공간입니다.

이 실습을 마칠 때쯤이면 여러분은 멀티버스의 주인이 되어 새로운 현실 (브랜치) 을 만들고, 그 사이를 넘나들며 (checkout 또는 switch), 이를 하나로 합치고 (merge), 더 이상 필요하지 않은 우주를 삭제할 수도 있게 될 것입니다. 이러한 초능력은 혼자 작업하든, 차원을 넘나드는 개발자 팀의 일원으로 작업하든 모든 시간 여행 개발자에게 필수적인 기술입니다.

Git 브랜치 마법사가 될 준비가 되셨나요? 이제 시작해 봅시다!

이 과정은 단계별 안내에 따라 학습하고 연습할 수 있는 가이드 랩입니다. 각 단계를 완료하고 실무 경험을 쌓으려면 지침을 주의 깊게 따르십시오. 통계에 따르면 이 과정은 완료율 94%초급 수준 랩이며, 학습자들로부터 100%의 긍정적인 평가를 받았습니다.

멀티버스 허브 설정하기

먼저, 모든 평행 현실을 관리할 중앙 허브를 만들어야 합니다. 이것이 우리의 메인 Git 저장소가 될 것입니다.

  1. 터미널을 엽니다. 이곳은 차원 사이를 이동하기 위한 제어판입니다.

  2. 프로젝트 공간으로 이동합니다:

cd ~/project

이 명령어는 현재 디렉토리를 홈 디렉토리의 "project" 폴더로 변경합니다. 현재 위치가 확실하지 않다면 pwd 명령어를 사용하여 현재 작업 디렉토리를 출력할 수 있습니다. 터미널에서 길을 잃었을 때 기억해두면 유용한 팁입니다.

  1. 멀티버스 실험을 위한 새로운 폴더를 만듭니다:
mkdir git-branch-lab
cd git-branch-lab

mkdir 명령어는 새 디렉토리를 생성하고, cd를 사용하여 그 안으로 들어갑니다. 이렇게 하면 깨끗한 상태에서 작업을 시작할 수 있습니다. 이 새 폴더를 시간 여행 작전의 통제실이라고 생각하세요.

  1. 이제 허브 (Git 저장소) 를 초기화합니다:
git init

이 명령어는 현재 디렉토리에 새로운 Git 저장소를 생성합니다. Git 이 프로젝트 추적을 시작하는 데 필요한 모든 파일을 설정하며, 이 파일들은 .git이라는 숨겨진 폴더에 저장됩니다.

다음과 같은 메시지가 표시되어야 합니다:

Initialized empty Git repository in /home/labex/project/git-branch-lab/.git/

축하합니다! 무한한 가능성을 가진 허브를 방금 만드셨습니다! 이것이 모든 시간 여행 모험의 기초가 될 것입니다.

  1. 이곳이 어떤 곳인지 미래의 자신에게 남길 노트를 작성해 봅시다:
echo "## Git Branch Lab" > README.md
echo "This is my hub for multiversal Git branch experiments" >> README.md

이 명령어들의 역할은 다음과 같습니다:

  • 첫 번째 명령어는 README.md라는 새 파일을 만들고 그 안에 "## Git Branch Lab"을 씁니다. 마크다운에서 '#' 기호는 제목을 만듭니다. 이 파일은 멀티버스 허브의 사용자 매뉴얼 역할을 할 것입니다.
  • 두 번째 명령어는 README.md에 또 다른 줄을 추가합니다. '>>'는 "파일 끝에 내용을 추가한다"는 의미입니다. 사용자 매뉴얼에 세부 사항을 덧붙이는 것입니다.

방금 무엇을 만들었는지 궁금하다면 cat README.md 명령어를 사용하여 파일 내용을 확인할 수 있습니다. 이 명령어는 멀티버스 허브의 매뉴얼을 읽는 것과 같습니다.

  1. 이제 이 새로운 우주에 첫 번째 저장 지점 (커밋) 을 만듭니다:
git add README.md
git commit -m "Initial commit: Create the multiverse hub"

자세히 살펴보겠습니다:

  • git add README.md는 Git 에게 README.md의 변경 사항을 추적하도록 지시합니다. 이것은 파일을 커밋하기 위해 스테이징 영역에 올리는 것입니다. 스테이징은 여행을 위해 짐을 싸는 준비 과정이라고 생각하세요.
  • git commit은 스테이징된 변경 사항으로 새로운 커밋 (저장 지점) 을 생성합니다. 이것은 현재 우주의 스냅샷을 찍는 것과 같습니다.
  • -m 플래그를 사용하면 커밋 메시지를 직접 입력할 수 있습니다. 항상 명확하고 설명적인 커밋 메시지를 작성하도록 노력하세요! 이 메시지는 스냅샷에서 무엇을 변경했는지 설명하는 메모와 같습니다.

무엇이 스테이징되었거나 커밋되었는지 확실하지 않을 때는 언제든지 git status를 사용하여 확인할 수 있습니다. 이는 시간 여행 장비의 상태를 점검하는 것과 같습니다.

첫 번째 평행 현실 만들기

이제 메인 우주 (master 브랜치) 가 설정되었으므로, 첫 번째 평행 현실을 만들어 봅시다!

  1. feature-dimension이라는 이름의 새 브랜치를 생성합니다:
git branch feature-dimension

이 명령어는 새 브랜치를 생성하지만, 아직 그 브랜치로 전환하지는 않습니다. 새로운 평행 우주를 설계했지만 아직 원래 우주에 머물러 있는 상태라고 생각하세요. 새로운 현실에 대한 청사진은 있지만 아직 발을 들이지는 않은 것과 같습니다.

새로운 타임라인을 만들었지만 아직 그 안에 있지는 않습니다. 현재 어떤 타임라인들이 있는지 확인해 봅시다:

git branch

다음과 같이 표시될 것입니다:

  feature-dimension
* master

* 표시는 현재 여러분이 어느 현실에 있는지를 나타냅니다. 지금은 여전히 메인 우주 (master) 에 있습니다. master 브랜치는 Git 저장소를 초기화할 때 기본적으로 생성되는 브랜치입니다.

팁: 브랜치 목록에서 나가서 터미널로 돌아가려면 q를 누르세요.

  1. 이제 새로운 현실로 뛰어들어 봅시다:
git checkout feature-dimension

이 명령어는 두 가지 일을 수행합니다:

  1. 현재 작업 디렉토리를 feature-dimension 브랜치로 전환합니다.
  2. 작업 디렉토리의 파일들을 feature-dimension 브랜치의 상태와 일치하도록 업데이트합니다. 마치 포털을 통해 새로운 현실로 발을 내딛는 것과 같습니다.

이제 다시 git branch를 실행하면 다음과 같이 보일 것입니다:

* feature-dimension
  master

* 위치가 이동했습니다. 새로운 차원으로 성공적으로 점프했다는 뜻입니다! 이제 여러분은 이 평행 현실에서 작업하게 됩니다.

참고로, git switch feature-dimension 명령어를 사용해도 동일한 결과를 얻을 수 있습니다. git switch는 Git 2.23 버전에서 도입된 최신 명령어로, 브랜치 전환을 위해 특별히 설계되어 더 명확하고 직관적입니다. 두 명령어 모두 결과는 같지만, 명확성을 위해 일반적으로 git switch 사용이 권장됩니다.

아직 파일에 아무런 변화가 없다고 걱정하지 마세요. 새 브랜치를 만들면 처음에는 원래 있던 브랜치의 복사본으로 시작합니다. 진짜 흥미로운 부분은 우리가 변화를 만들기 시작할 때부터입니다! 이러한 초기 복사본은 각 현실이 동일한 기초에서 시작되도록 보장합니다.

전문가 팁: 최신 버전의 Git 에서는 git checkout -b feature-dimension 또는 git switch -c feature-dimension 명령어를 사용하여 브랜치 생성과 이동을 한 번에 할 수 있습니다. 한 번의 동작으로 포털을 만들고 바로 뛰어드는 것과 같죠! git checkout-b 옵션이나 git switch-c 옵션은 브랜치 생성과 전환을 하나의 단계로 결합합니다.

길을 잃어서 현재 어느 차원 (브랜치) 에 있는지 기억나지 않는다면 다시 git branch를 실행하세요. *가 붙은 브랜치가 현재 여러분의 위치입니다. 멀티버스 지도에서 현재 위치를 확인하는 것과 같습니다.

새로운 현실 형성하기

이제 새로운 차원에 들어왔으니, 오직 이곳에만 존재하는 변화를 만들어 봅시다. 여기서 하는 모든 일은 우리가 병합하기로 결정하기 전까지는 메인 우주에 영향을 주지 않는다는 점을 기억하세요. 덕분에 메인 타임라인을 방해하지 않고 안전하게 실험할 수 있습니다.

  1. 이 현실에 새로운 유물을 만들어 봅시다:
echo "This is a powerful artifact from another dimension" > dimensional-artifact.txt

이 명령어는 dimensional-artifact.txt라는 새 파일을 만들고 그 안에 메시지를 씁니다. > 기호는 지정된 내용으로 새 파일을 생성 (또는 기존 파일 덮어쓰기) 하는 데 사용됩니다. 이 유물은 현재의 현실에서만 유일하게 존재합니다.

  1. 이제 이 유물을 우리 타임라인에 보존합시다:
git add dimensional-artifact.txt
git commit -m "Create a powerful interdimensional artifact"

이 명령어들은 1 단계에서 보았던 것들이라 익숙하실 겁니다. Git 에게 새 파일을 추적하도록 지시하고, 설명적인 메시지와 함께 저장 지점을 만드는 과정입니다. 새로 발견한 유물의 스냅샷을 찍는 것과 같습니다.

  1. 미래의 자신을 위해 이 새로운 현실에 대한 노트도 업데이트해 봅시다:
echo "##### Feature Dimension" >> README.md
echo "We've discovered a powerful artifact in this reality" >> README.md

이 명령어들은 README.md 파일에 새로운 줄을 추가합니다. >> 기호는 파일을 덮어쓰는 대신 기존 파일 끝에 내용을 덧붙입니다. 새로운 차원에서 발견한 내용을 반영하여 사용자 매뉴얼을 업데이트하는 것입니다.

  1. 이 변경 사항들도 저장합니다:
git add README.md
git commit -m "Document the discovery of the artifact"

다시 한번 저장 지점을 만듭니다. 이번에는 업데이트된 README.md 파일을 위한 것입니다. 미래의 자신을 위해 업데이트된 문서를 보존하는 과정입니다.

잘하셨습니다! 이제 평행 현실에서 변화를 만들어냈습니다. 이 변화들은 현재 feature-dimension 브랜치에만 존재합니다. 만약 master 브랜치로 다시 돌아간다면, 그곳에서는 이 변화들을 볼 수 없을 것입니다. 이러한 격리 덕분에 한 현실에서의 실험이 다른 현실에 영향을 주지 않게 됩니다.

현재 브랜치와 마스터 브랜치의 차이점을 보고 싶다면 git diff master 명령어를 사용할 수 있습니다. 메인 타임라인과 비교하여 현재 현실에서 무엇이 바뀌었는지 모두 보여줍니다. 두 우주의 상태를 비교하는 것과 같습니다.

현실 병합하기

이제 평행 현실에서 놀라운 발견을 마쳤으니, 이를 메인 우주로 가져올 시간입니다. 이 과정을 병합 (Merging) 이라고 합니다.

  1. 먼저, 메인 현실로 다시 돌아갑니다:
git checkout master

또는

git switch master

두 명령어 모두 우리를 master 브랜치로 되돌려 보냅니다.

  • git checkout은 브랜치 전환을 위한 오래된 명령어입니다. Git 초기부터 사용되어 왔으며 여전히 지원됩니다.
  • git switch는 Git 2.23 에서 도입된 최신 명령어입니다. 더 직관적이고 이해하기 쉽게 설계되었습니다.

어떤 명령어를 사용해도 좋지만, 명확성을 위해 git switch를 사용하는 것이 좋습니다.

이제 파일을 확인해 보면 차원 너머의 유물이 사라진 것을 알 수 있습니다! 걱정하지 마세요, 다른 차원에 안전하게 보관되어 있습니다. 이는 브랜치가 병합되기 전까지는 한 브랜치의 변경 사항이 다른 브랜치와 격리되어 있음을 보여줍니다.

  1. 이제 평행 현실을 메인 타임라인에 병합해 봅시다:
git merge feature-dimension

이 명령어는 Git 에게 feature-dimension의 모든 변경 사항을 가져와 master에 적용하도록 지시합니다. 평행 현실에서의 발견을 메인 우주로 통합하는 것과 같습니다.

다음과 같은 메시지가 표시될 것입니다:

Updating <hash1>..<hash2>
Fast-forward
 README.md              | 2 ++
 dimensional-artifact.txt | 1 +
 2 files changed, 3 insertions(+)
 create mode 100644 dimensional-artifact.txt

이 출력 결과는 어떤 파일이 변경되었고 몇 줄이 추가되거나 삭제되었는지 알려줍니다. "Fast-forward"는 Git 이 단순히 master 브랜치를 feature-dimension이 있는 위치로 앞당겼음을 의미합니다. 이는 충돌하는 변경 사항이 없었기 때문에 가능했습니다. Fast-forward 병합은 가장 간단한 유형의 병합으로, 병합하려는 대상 브랜치가 분기된 이후로 변경되지 않았을 때 발생합니다.

축하합니다! 방금 두 현실을 하나로 합쳤습니다! feature-dimension에서 만든 변화들이 이제 메인 우주의 일부가 되었습니다. 차원 너머의 유물과 업데이트된 문서가 이제 master 브랜치에 존재합니다.

  1. 유물이 병합을 통해 잘 넘어왔는지 확인해 봅시다:
cat dimensional-artifact.txt
cat README.md

이 명령어들은 파일의 내용을 표시합니다. feature-dimension에서 만들었던 변경 사항들이 보일 것입니다. 병합이 성공적이었음을 확인하는 과정입니다.

평행 현실에서의 발견을 메인 타임라인으로 성공적으로 가져왔습니다. 이것이 바로 개발자들이 새로운 기능을 메인 프로젝트에 도입하는 방식입니다! 이는 개발자가 기능을 독립적으로 작업한 후, 준비가 되었을 때 메인 코드베이스에 통합할 수 있게 해주는 Git 의 핵심 개념입니다.

현재 브랜치에 병합된 모든 브랜치 목록을 보고 싶다면 git branch --merged 명령어를 사용할 수 있습니다. 어떤 브랜치들이 통합되었는지 추적하는 데 유용합니다.

차원 포털 닫기

발견한 것들을 메인 현실로 성공적으로 가져왔으므로, 이제 평행 차원으로 통하는 포털을 닫을 수 있습니다. Git 용어로는 더 이상 필요하지 않은 브랜치를 삭제하는 것입니다.

  1. feature-dimension 포털을 닫아 봅시다:
git branch -d feature-dimension

-d 플래그는 브랜치를 삭제하도록 Git 에 지시하지만, 해당 브랜치가 완전히 병합된 경우에만 삭제합니다. 이는 병합되지 않은 변경 사항을 실수로 잃어버리지 않도록 하는 안전장치입니다. Git 은 현재 브랜치에 변경 사항이 병합된 경우에만 -d를 통한 삭제를 허용합니다.

만약 완전히 병합되지 않은 브랜치를 삭제하려고 하면 Git 이 경고를 보낼 것입니다. 그런 경우에도 정말로 삭제하고 싶다면 대문자 -D 플래그를 사용하여 강제로 삭제할 수 있습니다: git branch -D feature-dimension. 이 명령어는 병합 상태와 관계없이 브랜치를 강제로 삭제합니다. 이 강력한 기능은 주의해서 사용해야 합니다! 브랜치의 변경 사항이 정말로 필요 없다는 확신이 들 때만 사용하세요.

  1. 어떤 현실들이 남아 있는지 확인해 봅시다:
git branch

이제 master 브랜치만 보여야 합니다. 이는 feature-dimension으로 통하는 포털이 성공적으로 닫혔음을 의미합니다.

오래된 브랜치를 정리하면 멀티버스를 체계적으로 유지할 수 있습니다. 특히 많은 평행 현실이 존재하는 대규모 프로젝트에서 작업할 때는 더 이상 필요 없는 차원의 포털을 닫는 습관을 들이는 것이 좋습니다. 이렇게 하면 작업 공간을 깨끗하게 유지하고 혼란을 방지할 수 있습니다.

원격 브랜치를 포함한 모든 브랜치를 보고 싶다면 git branch -a를 사용할 수 있습니다. 여러 기여자와 함께 프로젝트를 진행할 때 유용합니다. 원격 브랜치는 다른 저장소에 있는 브랜치의 복사본입니다.

요약

축하합니다, 멀티버스의 주인님! Git 브랜치 마법 속성 과정을 성공적으로 마치셨습니다. 여러분이 달성한 놀라운 업적들을 되짚어 봅시다:

  1. 무한한 가능성을 위한 허브를 만들었습니다 (새 Git 저장소 생성).
  2. 평행 현실로 통하는 포털을 열었습니다 (새 브랜치 생성).
  3. 서로 다른 차원 사이를 뛰어넘는 법을 배웠습니다 (git checkout 또는 git switch를 사용한 브랜치 전환).
  4. 평행 우주에서 획기적인 발견을 했습니다 (별도 브랜치에서 변경 사항 커밋).
  5. 두 현실을 병합하여 발견한 것들을 메인 타임라인으로 가져왔습니다 (브랜치 병합).
  6. 마지막으로, 더 이상 필요하지 않은 차원 포털을 닫는 법을 배웠습니다 (브랜치 삭제).

이러한 멀티버스 기술은 시간 여행 개발자에게 매우 중요합니다. 브랜치를 사용하면 다음과 같은 이점이 있습니다:

  • 메인 타임라인을 방해하지 않고 평행 우주에서 서로 다른 기능 개발이나 버그 수정을 동시에 진행할 수 있습니다.
  • 안전한 평행 현실에서 기발한 아이디어를 마음껏 실험할 수 있습니다.
  • 각자 자신의 현실에서 작업하는 다른 차원 이동 개발자들과 협업할 수 있습니다.
  • 메인 타임라인을 안정적이고 오류 없는 상태로 유지하며, 준비가 된 기능만 병합할 수 있습니다.

즐거운 차원 여행 되시길 바라며, 여러분의 병합에 언제나 충돌이 없기를 기원합니다!