서론
오늘은 GIT을 통해 버젼관리를 하는 방법에 관해, 혼자 작업하는 상황을 가정하고 설명하겠습니다.
버젼관리 (변경사항 등록 및 삭제)
Local Repository는 working directory, staging area, repository 이렇게 3개의 트리로 구성됩니다.
- working directory : 로컬 레포지토리 등록이 되면 자동으로 변경사항이 추적되며, 그 내용은 이곳에 기록되는 곳을 말합니다.
- staging area : 버전관리를 하고 싶은 파일/폴더들을 보관하는 곳입니다.
- repository : 버젼관리 등록이 된 파일/폴더들을 보관하는 곳입니다.
기본 사용 방법
- git init
- 작업 중인 폴더에서 git을 사용할 수 있도록 해줍니다.
- git add [파일명]
- 폴더 내의 모든 파일을 git staging area에 추가해줍니다.
- git add . 입력하면, 디렉토리 내 모든 파일을 staging area로 이동시킵니다.
- git commit
- -m "commit message"
- 커밋과 동시에 커밋 메세지 작성합니다.
- -am
- 한번 트랙된 파일들을 add와 commit을 동시해 처리합니다.
- -m "commit message"
- git remote add origin [repostory주소]
- repository 주소를 origin 이름으로 등록합니다
- git push -u origin master
- origin이란 원격 저장소에 master branch에 푸시합니다.
버젼 읽기
- git status
- working directory의 변경사항들을 목록화해줍니다.
- git log
- commit 히스토리 확인합니다.
- -p
- commit 간에 파일의 바뀐 내용을 보여줍니다.
- -stat
- 파일들의 변경 여부를 알려준다.
버젼 수정하기
- git checkout [commit-id]
- 해당 버젼으로 변경된다.
- git checkout master
- 최신 버젼의 정보로 되돌아간다.
버젼 삭제하기
- git reset
- HEAD^
- 바로 이전 커밋 삭제하기
- --soft
- index 보존(add O, staged O), 워킹 디렉토리의 파일 보존.
- --hard
- index 취소(add X, unstaged), 파일 삭제.
- --mixed
- index 취소(add X, unstaged), 파일 보존.
- --[paths]
- 현 디렉토리 영역의 커밋 삭제하기
- HEAD^
특정 버젼으로 돌아가기
- git revert [commit-id]
- 기존 커밋 내역에 영향을 주지 않으면서, 이전 커밋을 취소하기 위한 커밋을 생성한다.
- 그러나 이전 커밋들이 존재하는 상태에서의 커밋을 취소할 순 없다. 역순으로 전부 다 취소해야 가능하다. 대신 revert를 쓰면, 버젼 정보도 보관하면서 이전 버젼으로 돌아갈 수 있다.
- git checkout [commit-id]
- checkout을 통해서 역시, 이전 버젼으로 돌아갈 수 있다.
- git reset
- HEAD가 가리키는 커밋을 삭제함으로써, 기존에 Repository의 히스토리를 변경합니다.
파일 상태를 Unstage로 변경하는 방법
실수로 git add . 명령을 사용하여 모든 파일을 Staging Area에 넣은 경우,
Staging Area(git add 명령 수행한 후의 상태)에 넣은 파일을 빼고 싶을 때가 있다.
이때, git reset HEAD [file] 명령어를 통해 git add를 취소할 수 있다.
작업 내용을 임시 저장하는 방법
- git stash : 모든 파일 임시저장
- pop
- 임시 저장 내용 복원
- list
- 모든 변겅점 목록을 보여줌
- drop
- 가장 최근에 저장한 임시 저장 내용 제거
- pop
프로젝트 다운로드 방법
# public repo
git clone [repository경로]
# private repo
git clone https://닉네임@github.com/dalicious-manager/[repository경로]
Git Rebase vs Merge
Git에서 브랜치를 합치는 두 가지 주요 방법이 있습니다: merge와 rebase입니다.
1. Merge와 Rebase의 차이점
구분 | git merge | git rebase |
---|---|---|
이력 관리 | 병합(commit 이력 병합), 히스토리 분기점 유지 | 선형화(재배치), 히스토리 깔끔하게 정리 |
커밋 이력 | Merge commit 생성 | 기존 커밋을 새롭게 복사해서 붙임 (커밋 해시 변경) |
충돌 처리 | 병합 지점에서 한 번에 처리 | 각 커밋마다 순차적으로 처리 |
사용 목적 | 협업 시 안전한 병합 | 개인 작업 히스토리 정리 |
2. 언제 어떤 것을 사용해야 할까?
git merge 사용 시점:
- 팀원과 공동으로 작업하는 브랜치를 병합할 때 (예: feature → dev)
- 이력 보존이 중요하거나 충돌 가능성이 많은 경우
예시:
git checkout dev
git merge feature/login
git rebase 사용 시점:
- 개인 브랜치에서 main 브랜치 기준으로 작업할 때
- PR 전에 커밋 히스토리를 깔끔하게 정리하고 싶을 때
예시:
git checkout feature/login
git fetch origin
git rebase origin/main
⚠️ 주의사항: rebase 후에는 강제 push(--force)가 필요하므로, 다른 사람이 사용 중인 브랜치에는 사용하지 않아야 합니다.
Git Fetch vs Pull
원격 저장소의 변경사항을 가져오는 두 가지 방법이 있습니다.
1. Fetch와 Pull의 차이점
구분 | git fetch | git pull |
---|---|---|
동작 방식 | 원격 변경사항만 가져옴 (로컬 브랜치는 변경 없음) | 원격 변경사항을 가져오고 자동으로 로컬 브랜치에 병합 |
충돌 가능성 | 없음 (단순 조회) | 있음 (자동 merge 시) |
안전성 | 안전함 (확인 후 병합 가능) | 주의 필요 (무분별한 pull 시 충돌 발생) |
2. 언제 어떤 것을 사용해야 할까?
git fetch 사용 시점:
- 원격 저장소의 변경사항을 먼저 확인하고 싶을 때
- 로컬에서 merge/rebase를 직접 제어하고 싶을 때
git fetch origin
git log HEAD..origin/main # 변경사항 확인
git merge origin/main # 확인 후 병합
git pull 사용 시점:
- 단순히 최신 상태로 동기화하고 싶을 때 (혼자 작업 중)
- 이력 충돌 걱정이 없거나, fast-forward merge만 필요한 경우
git pull origin main
실전 팁
협업 시:
- merge + fetch 조합 사용
- rebase는 개인 브랜치에서만 사용
개인 작업 시:
- rebase로 커밋 히스토리 정리
- PR 전 리팩토링에 활용
안전한 작업 흐름:
- fetch로 변경사항 확인
- diff로 차이점 검토
- merge로 안전하게 병합
참고사이트
Git
[Git] git add 취소하기, git commit 취소하기, git push 취소하기 - Heee's Development Blog
[GitHub] remote에 이미 push한 파일 지우기
반응형
'CS > Git' 카테고리의 다른 글
GitHub config 변경 방법 (0) | 2025.04.24 |
---|---|
[GIT] .gitignore가 작동하지 않을 때 대처 방법 (0) | 2023.06.23 |
댓글