Git을 쓸 때 항상 헷갈렸던 로컬/원격 저장소의 개념, 브랜치 흐름, 그리고 자주 쓰는 명령어들을 정리해봤다. 실제로 자주 쓰이는 흐름을 따라가며 Git 명령어를 정리했다.
📁 Git 저장소의 기본 구조
✅ 로컬 저장소 :내 컴퓨터에 있는 Git 저장소
- clone 명령어를 통해 원격 저장소를 복사해 생성됨
- 로컬 저장소에는 기본 브랜치(보통 main)만 실제로 만들어지고,
원격 브랜치들은 origin/* 형태로 스냅샷처럼 참조 정보만 존재
✅ 원격 저장소
- GitHub, GitLab 등 온라인 서버에 존재하는 Git 저장소
- 여러 사용자가 공동으로 협업할 수 있는 중앙 저장소 역할
✅ origin
- 원격 저장소의 기본 이름 (alias)
=> origin/main, origin/develop처럼 표시되며, 원격 저장소의 브랜치 상태를 로컬에서 참조하는 이름
*참고 : origin/develop은 로컬에 존재하는 스냅샷일 뿐이므로, 실제 작업하려면 git checkout -b develop origin/develop 또는 git switch -c develop origin/develop으로 로컬 브랜치를 따로 만들어야 함!
🔁 Git 기본 흐름과 명령어
✅ 저장소 복제하기
git clone https://github.com/username/repo.git
- 원격 저장소를 복사해서 로컬 저장소 생성
- 기본 브랜치(보통 main)만 로컬에 생기고, 나머지는 origin/브랜치명으로 존재
✅ 브랜치 목록 확인
git branch # 로컬 브랜치 목록
git branch -r # 원격 브랜치 목록
git branch -a # 전체 목록
✅ 원격 브랜치 기반 로컬 브랜치 생성
#두 방법 모두 가능
git checkout -b develop origin/develop
git switch -c develop origin/develop
- origin/develop 기준으로 그대로 로컬 develop 브랜치 생성
- -b 옵션은 branch의 약자
- Git 2.23 이상 버전부터 -c는 "create"의 약자로, 역할은 -b와 동일
✅ 브랜치 이동
#두 방법 모두 가능
git checkout 브랜치명
git switch 브랜치명
- 로컬 브랜치로 이동 (cd처럼 작업 공간 전환)
🛠️ 작업과 커밋, 푸시
git add . # 변경된 파일 전부 스테이징
git add 파일명 # 특정 파일만
git commit -m "작업 내용" # 로컬에 커밋 저장
git push origin 브랜치명 # 원격에 업로드
✅ 원격 브랜치와 연결 (upstream 설정)
git push -u origin 브랜치명
- -u : --set-upstream의 줄임말로 현재 로컬 브랜치를 원격 저장소의 특정 브랜치와 연결(upstream branch 설정)하는 역할을 함. 즉, 이후에는 git push만해도 -u로 설정한 브랜치로 push됨.
📥 변경사항 받아오기
✅ 병합 포함 (pull)
git pull origin develop
- 원격 브랜치의 변경사항을 로컬에 가져오고 자동 병합
✅ 병합 없이 정보만 가져오기 (fetch) *Git 저장소의 기본 구조 그림 참고
git fetch origin
- 원격의 최신 커밋 정보를 origin/브랜치명으로 업데이트만 함
- 병합은 수동으로 해야 함
🌿 브랜치 정리 및 삭제
✅ 로컬 브랜치 삭제
git branch -d 브랜치명 # 안전 삭제 (병합 안 되면 거부)
git branch -D 브랜치명 # 강제 삭제
✅ 원격 브랜치 삭제
git push origin --delete 브랜치명
🔁 rebase로 깔끔한 히스토리 만들기
git fetch origin
git rebase origin/develop
- 내 커밋을 origin/develop 최신 상태 위에 다시 쌓음
- 히스토리가 일직선으로 정리됨 (커밋 ID는 변경됨)
- 협업 중이고 이미 푸시된 커밋을 건드리면 안 된다면 이 방법은 비추
💣 실수 복구 / 강제 되돌리기
✅ 강제 초기화
git reset --hard origin/main
✅ 변경 전 파일/폴더 제거
git clean -df
# -d: 폴더 포함, -f: 강제 삭제
✅ 실수한 커밋 복구 (reflog)
git reflog git checkout HEAD@{1}
- 최근 HEAD 위치 기록 확인 → 커밋 복구 가능
🌐 원격 저장소 연결 관리
✅ 원격 저장소 주소 확인 / 삭제 / 재설정
git remote -v # 현재 연결 상태
git remote remove origin # origin 연결 제거
git remote add origin <repo-url> # 새 origin 연결
🧠 기타 참고 명령어
git log --oneline --graph | 히스토리를 시각적으로 확인 |
git diff | 변경된 내용 비교 |
git status | 현재 상태 (변경사항, 스테이징 여부 등) |
git gc | 내부 불필요한 데이터 청소 (Garbage Collection) |
🌈 Pull Request (PR)
원격 저장소에 push 후에 PR을 생성하면 됨. 내가 만든 브랜치를 원격 저장소의 브랜치에 합치고 싶을 때 요청할 때 사용함.
1. PR Title과 Description
- PR 제목과 설명은 명확하고 간결하게 작성
- 리뷰어가 보기 쉽게 변경 사항 요약을 정리해두면 협업이 편함
- PR 만들기 전 git pull --rebase origin develop 등으로 최신 상태 반영 권장
2. 오른쪽 사이드 바 기능
Reviewers | 코드 리뷰를 할 사람(요청을 받은 사람) |
Assignees | 이 PR의 담당자 (본인 지정 또는 타인 지정 가능) |
Labels / Projects / Milestone | 태그 분류(ex.feature, frontend) / GitHub 보드와 연동 가능 / 버전 및 릴리즈 목표로 분류 |
Notifications | 댓글이나 변경사항에 대한 알림 설정 |
Development | 이 PR로 어떤 이슈가 닫힐 예정인지 (자동 클로징 키워드 연동) |
3. 하단에 타임라인 ( 위 이미지에서는 짤려서 안보임 )
- 커밋 메세지, 리뷰 요청 기록, 작업 담당자 지정 기록 등등 해당 PR과 관련된 히스토리 보여줌
4. No conflicts with base branch
- PR 브랜치와 base 브랜치(main)에 충돌이 없을 때만 보임
- 만약 충돌(conflict)이 있으면 빨간색 박스로 ❌ This branch has conflicts that must be resolved 나타남
5. Review requested
- 리뷰 요청이 되었지만, 필수로 지정하지 않았으므로 바로 병합 가능
- Reviewers 중 누군가가 리뷰를 승인해주면 Approved로 바뀜
- Merge 버튼 세 종류
- Create a merge commit : 별도 머지 커밋을 만들어서 두 브랜치를 합쳐 - 커밋 기록 보존 + Merge commit 추가됨
- Squash and merge : 모든 커밋을 하나로 압축(squash) 해서 머지 - 커밋 1개로 합쳐짐 (히스토리 깔끔함)
- Rebase and merge : 커밋들을 다시 쌓아서 머지함 (rebase) - 커밋 보존되지만 브랜치 없이 직선으로 이어짐
6. Comment 입력창
- 팀원들이 여기다가 코멘트를 남기거나 본인이 직접 설명을 추가할 수도 있음
- Close pull request 누르면 PR을 닫을 수 있음 (병합은 안 됨)