Learn Git Branching을 통해서 git 배우기

개요

이번에 Learn Git Branching을 통해 Git의 기본 개념부터
커밋과 브랜치의 동작 방식까지 전반적인 흐름을 차근차근 학습해보았다.

기존에는 Git을 단순히 add, commit, push 같은 명령어를 사용하는 도구로만 생각했지만,
이번 학습을 통해 Git이 단순한 명령어 모음이 아니라
버전 관리와 협업을 위한 구조적인 시스템이라는 점을 명확하게 이해할 수 있었다.

특히 이 학습 플랫폼은 Git의 동작을 글이 아니라 브랜치와 커밋 트리를 통해 시각적으로 보여주기 때문에
각 명령어가 실행될 때 구조가 어떻게 변하는지를 직관적으로 확인할 수 있었다.

이를 통해 단순히 “명령어를 외우는 것”이 아니라 커밋이 어떻게 쌓이고, 브랜치가 어떻게 이동하며,
HEAD가 어떤 기준으로 움직이는지를 전체 흐름 속에서 이해할 수 있었다.


Learn Git Branching이란?

Learn Git Branching은 Git의 핵심 개념을
시각적으로 학습할 수 있도록 도와주는 인터랙티브 학습 도구이다.

보통 Git을 처음 배울 때는 명령어만 외우게 되는 경우가 많은데,
이 도구는 각 명령어를 입력했을 때 브랜치가 어떻게 이동하고, 커밋이 어떻게 쌓이며,
HEAD가 어디를 가리키는지를 그림처럼 보여준다.

즉, 단순히 “명령어를 외우는 것”이 아니라

  • 왜 이런 명령어를 쓰는지
  • 이 명령어가 Git 내부 구조에 어떤 영향을 주는지
  • 브랜치와 커밋의 관계가 어떻게 바뀌는지

를 한 번에 이해할 수 있게 도와준다.


이번에 학습한 Git의 기본

처음 화면에서는 Git을 배우기 위한 전반적인 안내와 함께
학습 모드에서 사용할 수 있는 기본 명령어들을 보여주었다.
확인한 주요 명령어는 다음과 같다.

  • commit
  • branch
  • checkout
  • cherry-pick
  • reset
  • revert
  • rebase
  • merge

처음에는 이 명령어들이 많아 보일 수 있지만,
사실 Git의 기본 구조를 이해하면 각 명령어가 어떤 역할을 하는지 점점 연결되기 시작한다.


Git이란 무엇인가?

Git은 프로젝트의 변경 이력을 저장하고 관리하는 버전 관리 시스템(Version Control System) 이다.
쉽게 말하면, 파일을 수정할 때마다 그 상태를 기록해두고
필요하면 이전 상태로 돌아가거나, 다른 사람과 변경 내용을 합칠 수 있게 해주는 도구이다.

Git을 사용하는 이유는 크게 세 가지로 볼 수 있다.

1. 변경 이력 관리

프로젝트를 진행하다 보면 파일을 여러 번 수정하게 된다.
이때 Git을 사용하면 어떤 시점에 어떤 내용이 바뀌었는지 기록할 수 있다.

2. 복구 가능

실수로 잘못 수정했거나 이전 버전으로 돌아가야 할 때,
Git은 특정 시점의 상태로 되돌아갈 수 있게 해준다.

3. 협업

여러 명이 동시에 같은 프로젝트를 작업할 때,
각자의 변경 내용을 분리해서 작업하고 나중에 합칠 수 있다.
이 과정에서 브랜치와 병합 개념이 매우 중요해진다.


Git에서 가장 중요한 기본 개념

Git을 배우면서 가장 먼저 이해해야 하는 것은
커밋(commit), 브랜치(branch), HEAD 세 가지라고 생각한다.

1. Commit

커밋은 프로젝트의 특정 시점을 저장한 기록이다.
즉, “이 상태를 하나의 버전으로 남겨두겠다”라고 표시하는 것이다.

커밋이 쌓이면 프로젝트의 히스토리가 만들어지고,
Git은 이 커밋들을 기반으로 프로젝트의 변경 흐름을 관리한다.


2. Branch

브랜치는 말 그대로 작업 흐름을 나누는 가지이다.
기본적으로 main 브랜치가 중심이 되고,
새로운 기능 개발이나 실험적인 작업은 다른 브랜치를 만들어 진행할 수 있다.

브랜치를 사용하는 이유는 명확하다.

  • 메인 작업 흐름을 안전하게 유지할 수 있고
  • 새로운 기능을 독립적으로 개발할 수 있으며
  • 나중에 작업이 완료되면 다시 합칠 수 있기 때문이다

즉, 브랜치는 협업과 기능 분리에 있어 핵심적인 개념이다.


3. HEAD

HEAD는 현재 내가 작업하고 있는 위치를 가리키는 포인터라고 볼 수 있다.
처음 Git을 배울 때 가장 헷갈리는 개념 중 하나이지만,
결국 “지금 내가 어느 커밋/브랜치 위에 서 있는가”를 나타내는 표시라고 이해하면 된다.

Git 명령어를 실행할 때 많은 동작이 HEAD를 기준으로 이루어진다.
그래서 브랜치 이동, 커밋 생성, rebase, merge 등을 이해할 때 HEAD 개념이 매우 중요하다.


명령어별 기본 역할 정리

git commit

현재 변경된 내용을 새로운 커밋으로 저장한다.
프로젝트의 이력을 쌓는 가장 기본적인 명령어이다.

git branch

새로운 브랜치를 만들거나 기존 브랜치를 확인할 때 사용한다.
작업 흐름을 분리하는 시작점이 된다.

git checkout

다른 브랜치나 커밋으로 이동할 때 사용한다.
현재 HEAD가 가리키는 위치를 바꾸는 명령어라고 이해할 수 있다.

git merge

한 브랜치의 작업 내용을 다른 브랜치에 합칠 때 사용한다.
협업이나 기능 통합 단계에서 자주 사용된다.

git rebase

브랜치 구조를 좀 더 깔끔하게 정리하면서 작업 이력을 재배치할 때 사용한다.
처음에는 merge보다 어렵게 느껴질 수 있지만, Git 흐름을 이해하는 데 매우 중요하다.

git cherry-pick

특정 커밋 하나만 골라서 현재 브랜치에 가져오고 싶을 때 사용한다.

git reset

브랜치나 HEAD를 이전 상태로 되돌릴 때 사용한다.
실습 중 실수했을 때 구조를 다시 맞추는 데 유용하다.

git revert

기존 커밋을 취소하는 새로운 커밋을 만드는 방식이다.
히스토리를 보존하면서 변경을 되돌릴 때 사용된다.


Git Commit

커밋은 Git에서 가장 기본이 되는 개념으로,
현재 프로젝트의 상태를 하나의 시점으로 저장하는 기록이다.

즉, “지금 상태를 하나의 버전으로 남긴다”는 의미를 가진다.

Git은 전체 파일을 그대로 저장하는 것이 아니라,
이전 상태와의 차이(변경사항)를 기반으로 저장하기 때문에
효율적으로 이력을 관리할 수 있다.

커밋이 하나씩 쌓이면서 프로젝트의 히스토리가 만들어지고,
이 커밋들이 연결되어 하나의 트리 구조를 이루게 된다.


Git Branch

브랜치는 특정 커밋을 가리키는 포인터라고 볼 수 있다.

처음에는 브랜치를 하나의 독립된 작업 공간처럼 생각했지만,
실제로는 커밋을 가리키는 단순한 참조(reference)에 가깝다.

새로운 브랜치를 생성하면 현재 커밋을 기준으로 동일한 위치를 가리키게 되고,
이후 해당 브랜치에서 커밋을 생성하면 그 브랜치만 앞으로 이동하게 된다.

이를 통해 하나의 프로젝트에서 여러 작업을 동시에 진행할 수 있으며,
기존 작업 흐름(main 브랜치)을 안전하게 유지할 수 있다.


Branch와 Commit의 관계

브랜치와 커밋의 관계를 이해하는 것이 중요하다.

커밋은 실제 데이터이고,
브랜치는 그 커밋을 가리키는 포인터이다.

즉, Git에서 실제로 중요한 것은 커밋이며
브랜치는 단지 “어디를 보고 있는지”를 나타내는 이름표 역할을 한다.

이 구조를 이해하면 이후 merge나 rebase 같은 개념도 훨씬 쉽게 이해할 수 있다.


Merge (브랜치 합치기)

merge는 서로 다른 브랜치의 작업 내용을 하나로 합치는 과정이다.

한 브랜치에서 작업한 내용을 다른 브랜치에 반영할 때 사용되며,
두 브랜치의 공통 조상을 기준으로 변경 내용을 합쳐 새로운 커밋을 생성한다.

이때 생성되는 커밋을 merge commit이라고 한다.

merge의 특징은 기존 히스토리를 그대로 유지한다는 점이다.
즉, 브랜치가 나뉘었던 구조가 그대로 남기 때문에
이력은 다소 복잡해질 수 있지만, 변경 흐름을 명확하게 확인할 수 있다.


Rebase (히스토리 재정렬)

rebase는 브랜치의 기준을 다른 브랜치 위로 옮기는 작업이다.

기존 브랜치에서 작업한 커밋들을 새로운 기준 위에 다시 쌓는 방식으로 동작하며,
히스토리를 하나의 직선 형태로 정리할 수 있다.

merge와 달리 새로운 merge commit을 만들지 않고,
기존 커밋을 복사하여 새로운 위치에 재배치한다는 특징이 있다.

이로 인해 히스토리가 깔끔해지는 장점이 있지만,
이미 공유된 커밋에 대해서 rebase를 수행하면 문제가 발생할 수 있기 때문에
사용 시 주의가 필요하다.


Merge와 Rebase의 차이

merge와 rebase는 모두 브랜치를 합치는 기능이지만,
동작 방식과 결과가 다르다.

merge는 기존 히스토리를 유지하면서 새로운 커밋을 추가하는 방식이고,
rebase는 커밋을 재정렬하여 히스토리를 직선 형태로 만드는 방식이다.

즉, merge는 “기록을 남기는 방식”이고 rebase는 “기록을 정리하는 방식”이라고 볼 수 있다.


Commit 흐름 이해하기

Git에서 commit은 단순한 저장이 아니라
프로젝트의 상태를 시간 순서대로 연결하는 구조이다.

처음에는 단순히 “저장 버튼”처럼 느껴졌지만,
실제로는 이전 커밋을 기반으로 새로운 커밋이 생성되면서
하나의 연결된 히스토리 구조를 만든다.

즉, commit은 각각 독립적인 것이 아니라
서로 연결된 체인 형태로 관리된다.

이 구조를 이해하면서 Git이 단순한 파일 저장이 아니라
“변경 이력 그래프”를 관리하는 시스템이라는 것을 느꼈다.


Branch 생성과 이동

브랜치를 생성하는 과정은 생각보다 단순했다.

  • git branch newBranch

이 명령어는 새로운 작업 공간을 만드는 것이 아니라
현재 커밋을 가리키는 새로운 포인터를 하나 추가하는 것이다.

이후 checkout을 통해 브랜치를 이동하면
HEAD가 해당 브랜치를 가리키게 된다.

  • git checkout newBranch

이 과정을 통해
현재 작업 위치가 어디인지 명확하게 확인할 수 있었다.


HEAD의 역할

이번 단계에서 가장 중요하게 느낀 개념은 HEAD였다.

HEAD는 단순히 “현재 위치”를 의미하는 것이 아니라
Git의 모든 작업이 기준으로 삼는 핵심 포인터이다.

브랜치를 이동하면 HEAD도 함께 이동하고,
commit을 하면 HEAD가 가리키는 브랜치가 앞으로 이동한다.

즉,

  • HEAD → 현재 위치
  • 브랜치 → 특정 커밋을 가리킨다.
  • commit → 브랜치를 앞으로 이동시킨다.

이 구조가 연결되어 동작한다는 것을 이해하게 되었다.


브랜치에서의 commit

브랜치를 나눈 상태에서 commit을 수행하면
각 브랜치가 독립적으로 앞으로 나아간다.

예를 들어, main 브랜치에서 commit을 하면 main만 이동하고
다른 브랜치에는 영향을 주지 않는다.

이 구조 덕분에 여러 작업을 동시에 진행할 수 있다는 점을 체감할 수 있었다.

즉, 브랜치는 단순한 분기가 아니라
각각 독립적인 작업 흐름을 만들어주는 핵심 기능이다.


checkout의 의미

checkout은 단순한 이동 명령어처럼 보이지만
실제로는 작업의 기준을 바꾸는 중요한 명령어이다.

checkout을 수행하면 현재 작업 브랜치가 변경되고
HEAD가 이동하며 이후 commit의 기준이 바뀐다

즉, 어떤 브랜치에서 작업할지를 결정하는 명령어이다.

이 개념을 이해하면서 “지금 내가 어디서 작업하고 있는지”를
항상 인식하는 것이 Git 사용에서 매우 중요하다는 것을 느꼈다.


이번 학습에서 느낀 점

이번 학습을 통해 가장 크게 느낀 점은
Git은 명령어 중심이 아니라 구조 중심으로 이해해야 한다는 것이다.

처음에는 branch, checkout, merge 같은 명령어들이
서로 비슷하게 느껴지고 헷갈렸지만, 커밋 트리를 기반으로 동작을 직접 확인해보면서
각 명령어의 역할이 명확하게 구분되기 시작했다.

특히 다음과 같은 점이 인상적이었다.

  • commit은 단순한 저장이 아니라 이전 커밋과 연결된 흐름을 만든다.
  • 브랜치는 독립된 공간이 아니라 특정 커밋을 가리키는 포인터이다.
  • HEAD는 현재 작업 위치를 나타내며 Git의 모든 동작 기준이 된다.

이처럼 Git은 각각의 명령어를 따로 이해하는 것이 아니라
현재 위치(HEAD) + 커밋 흐름 + 브랜치 구조”를 함께 이해해야 전체 동작을 제대로 파악할 수 있다는 것을 느꼈다.


정리

이번 학습에서 정리한 핵심 내용은 다음과 같다.

  • Git은 프로젝트의 변경 이력을 관리하는 버전 관리 시스템이다.
  • commit은 프로젝트의 특정 시점을 기록하며 히스토리를 구성한다.
  • branch는 특정 커밋을 가리키는 포인터 역할을 한다.
  • checkout은 작업 위치(HEAD)를 이동시키는 명령어이다.
  • HEAD는 현재 내가 작업하고 있는 위치를 나타낸다.

결국 Git의 핵심은
현재 위치와 커밋의 흐름을 어떻게 이해하고 조작하는가”에 있다.

이번 학습을 통해 Git의 기본 구조를 이해할 수 있었고,
앞으로는 이를 기반으로 merge, rebase, 원격 저장소 개념까지 확장하면서 Git을 더 깊이 있게 활용해보고자 한다.