깃을 쓰다 보면 비슷한 듯 다른 명령어들 때문에 헷갈릴 때가 많습니다. 제 스스로 가장 많이 헷갈리는 개념 TOP 5를 골라 보았습니다.
📌 1. Fetch(페치) vs Pull(풀)
개념 정리:
- Fetch: 원격(remote) 저장소에서 변경 내용을 로컬에 가져오기만 하고 적용하지는 않음.
- Pull: 원격 저장소의 변경 내용을 로컬에 가져와 즉시 병합하여 바로 적용함.
# Fetch 예시
git fetch origin main
# Pull 예시
git pull origin main
🌱 쉬운 이해
- Fetch는 온라인 쇼핑몰에서 상품만 장바구니에 넣어둔 상태입니다.
- Pull은 상품을 실제로 결제해서 집으로 배송받아 바로 쓰는 상태입니다.
주로 협업할 때 타인의 작업 내용을 확인만 하고 싶다면 fetch, 즉시 반영하려면 pull을 사용합니다.
📌 2. Merge(머지) vs Rebase(리베이스)
개념 정리:
- Merge: 두 브랜치를 병합할 때 새로운 병합(commit)이 추가됩니다.
- Rebase: 현재 브랜치를 다른 브랜치 위에 올려서 이력을 깔끔히 정리합니다.
# Merge 예시 (main에 feature 병합)
git checkout main
git merge feature
# Rebase 예시 (main 위에 feature를 올림)
git checkout feature
git rebase main
🌱 쉬운 이해
- Merge는 서로 다른 길(Branch)이 만나는 지점에서 교차로를 만드는 방식입니다. (이력이 복잡해질 수 있음)
- Rebase는 길을 교차로 없이 한 줄로 정리하여 깔끔하게 만듭니다. (단, 이력이 재구성되므로 주의!)
일반적으로 협업 브랜치는 merge를, 개인 작업 브랜치는 rebase를 활용하면 좋습니다.
📌 3. HEAD의 개념 (현재 커밋 확인 및 이동)
개념 정리:
- HEAD: 깃이 현재 바라보고 있는 브랜치나 커밋의 위치를 나타냅니다.
# 현재 HEAD가 가리키는 위치 확인
git log -1 HEAD
# 다른 브랜치로 HEAD 이동 (체크아웃)
git checkout main
# 특정 커밋으로 HEAD 이동 (분리된 HEAD)
git checkout 커밋해시값
🌱 쉬운 이해
- HEAD는 깃이 현재 어느 지점(브랜치 또는 커밋)을 가리키고 있는지를 표시하는 깃의 "눈"입니다.
- 브랜치를 전환하거나 체크아웃(checkout)을 하면 HEAD도 자동으로 이동합니다.
HEAD 이동 시 브랜치가 아닌 특정 커밋에 직접 이동하면 Detached HEAD 상태가 되니 주의하세요!
📌 4. Stash(스태시) 활용법
개념 정리:
- Stash: 작업 중 변경 내용을 임시로 저장해놓고, 작업 공간을 깨끗하게 만드는 명령어입니다.
# 현재 작업 상태를 임시 저장
git stash
# 저장한 스태시 리스트 확인
git stash list
# 저장한 최신 스태시를 작업공간으로 불러오기 (pop하면 리스트에서 제거됨)
git stash pop
# 불러오면서 리스트에서 제거하지 않으려면
git stash apply
🌱 쉬운 이해
- 급히 다른 작업을 해야 할 때 내 책상을 치우지 않고 잠시 옆으로 밀어놓는 느낌입니다.
- git stash로 임시 저장하고, 작업 후 git stash pop으로 다시 불러와 이어서 작업할 수 있습니다.
갑자기 급한 작업을 해야 하거나 임시로 작업 공간을 정리해야 할 때 유용합니다.
📌 5. Reset(리셋) vs Revert(리버트)
개념 정리:
- Reset: 과거의 특정 커밋 이후 이력을 완전히 삭제하고 과거 상태로 되돌립니다.
- Revert: 특정 커밋의 변경 내용을 취소하는 새로운 커밋을 만듭니다.
# Reset 예시 (특정 커밋 이후 이력을 삭제, 강력한 방식!)
git reset --hard 커밋해시값
# Revert 예시 (특정 커밋의 변경사항만 무효화하는 새 커밋 생성)
git revert 커밋해시값
🌱 쉬운 이해
- Reset은 시간을 완전히 돌려 그 이후의 사건을 지워버리는 타임머신 방식입니다. 과거 기록이 삭제됩니다.
- Revert는 과거의 사건을 공식적으로 무효화하는 새로운 이벤트를 추가하는 방식입니다. 이력은 남습니다.
Reset은 로컬 작업에서만 추천하고, 협업 중이라면 Revert로 이력을 보존하는 게 안전합니다!
🚩 간단 정리
Fetch | 원격 저장소에서 변경 사항만 확인 | git fetch origin main |
Pull | 원격 변경 사항을 즉시 반영 | git pull origin main |
Merge | 두 브랜치를 병합 (병합 커밋 생성) | git merge feature |
Rebase | 브랜치를 다른 브랜치 위로 이동하여 정리 | git rebase main |
HEAD | 현재 위치 확인 및 이동 | git checkout main |
Stash | 임시 저장 후 작업 공간 정리 | git stash, git stash pop |
Reset | 과거로 돌아가기 (이력 삭제) | git reset --hard 커밋해시 |
Revert | 커밋을 취소하는 새로운 커밋 추가 | git revert 커밋해시 |
깃 명령어는 익숙해질수록 자연스럽게 이해됩니다. 자주 사용하고 연습해 보면서 자신만의 활용 방법을 찾아보세요!
'프로그래밍 > Git' 카테고리의 다른 글
깃(Git) 푸시 후 "머지할 내용이 없다"는 황당 메시지, 왜 그럴까? (0) | 2025.06.17 |
---|---|
Git Rebase 란? (0) | 2025.04.09 |
Github 이슈(Issue) 만들어 관리하기 (0) | 2022.09.21 |
github 리포지토리 포크(fork)하기 (1) | 2022.09.20 |
github, pull request 만들고 merge하기 (2) | 2022.09.16 |
댓글