기타/Git

[Git] 버전관리 및 브랜치 활용법

glorypang 2025. 3. 17. 14:26
728x90
반응형
SMALL

1. 버전관리 (Version Control)

1.1 `git init` - Git 저장소 초기화

Git을 사용하려면 저장소(Repository)를 먼저 만들어야 함

$ mkdir my_project  # 새 폴더 생성
$ cd my_project     # 폴더 이동
$ git init          # Git 저장소 초기화

  • `.git` 폴더가 생성되며, Git이 버전 관리를 시작할 준비 상태가 됨
  • `$ ls -al``.git` 폴더가 생성되었는지 확인 가능

1.2 `git add` - 파일 추가 및 관리 시작

Git에 새로운 파일을 추가하려면 `git add`를 사용

$ vim a.txt   # a.txt 파일 생성 후 내용 입력
$ git status  # 현재 상태 확인 (추적되지 않은 파일 표시)
$ git add a.txt  # Git에 파일 추가

cat a.txt로 저장된 내용 확인 가능

 

추적되지 않은 파일이란?

  • Git이 아직 관리하지 않는 파일로, `git add`를 통해 Git에 포함시켜야 버전 관리됨. 
  • '파일을 Git에게 버전관리를 시작해'라고 하기 전까진 무시함.
  • 관리해야 할 파일을 명확하게 알려주기 위해 사용
$ git status
# 새 파일 a.txt가 추가됨

$ git add a.txt  -> $ git status 하면 관리할 파일이라고 Git이 인식

전역 사용자 정보 설정 Git은 커밋 기록에 작성자 정보(이름, 이메일)를 저장

$ git config --global user.name "사용자이름"
$ git config --global user.email "이메일주소"

1.3 `git commit` - 버전 만들기

Git은 커밋(commit)을 통해 변경 사항을 저장

$ git commit
# 메세지 입력 후 ESC -> :wq 로 저장하고 종료

 

 

간단한 커밋 방법

$ git commit -m "첫 번째 커밋"

 

 

커밋 내용 확인 

  • 언제 작성됐는지, 작성자는 누구인지 확인
$ git log

 

수정 후 커밋 과정

$ vim a.txt  # 파일 내용 수정
$ git status  # 수정된 파일 확인 (modified 상태)
$ git add a.txt  # 수정된 파일을 다시 스테이징 -> "버전 관리 해줘~"라는 의미
$ git commit -m "a.txt 수정됨"

 

 

다시 `$git commit`통해 메시지를 '22'로 작성 후, `$git log`

📌 정리

  • `git add` → 파일을 스테이징(stage area) 상태로 만듦
  • `git commit` → 버전(repository)을 생성하여 변경 사항 저장

1.4 Git Stage Area (스테이징 영역)

  • Git이 `add`를 사용하여 커밋할 파일을 미리 준비하는 과정
$ cp a.txt b.txt   # a.txt를 복사하여 b.txt 생성
$ git add b.txt    # b.txt를 Git에 추가
$ git commit -m "b.txt 추가됨"

 

b.txt도 $ git add b.txt 후 $ git status 확인 시 commited됨

Git은 왜 Add를 해야하는가?

  • `commit`하고자하는 파일만 커밋 가능
  • `$git add a.txt` 는 a.txt만 커밋 대기 상태

  • 이 상태에서 `$git commit`을 해도 a.txt는 커밋되지만 b.txt는 커밋되지 않음
  • commit은 커밋대기 상태인 것들만 커밋 시킴
  • 커밋대기 상태 = stage area  // 커밋 결과 저장되는 곳 = repository

 

 추가 팁

$ git commit -a  # 수정하거나 삭제한 파일 자동으로 add

$ git commit -am "message" # 수정하거나 삭제한 파일 자동으로 add + 에디터를 띄우지 않고 메시지 바로 작성 가능

1.5 변경 사항 확인 (`git log`, `git diff`)

커밋 로그 확인

$ git log
$ git log -p # 커밋 사이의 차이점 확인

4와 3사이의 차이점 : 버전 3에서는 2222가 있었는데 4에서는 2222가 없어지고 a.txt 가 생겼다

 

이전 버전과 현재 버전의 차이점 확인

  • `$git log`를 사용하면 각 커밋의 고유 id를 확인 가능
  • `$git diff id1..id2` 로 변화 확인 가능
$ gif diff # 이전 커밋과 지금 커밋의 차이 확인
$ git diff id1..id2 # 내가 원하는 두 개의 버전 간 차이 확인

1.6 과거로 돌아가기 (`git reset`, `git revert`)

커밋 되돌리기 (`reset`)

$ git reset <커밋 ID> --hard
 

기존 // reset 후 버전 3으로 변경

📌 주의: --hard 옵션은 되돌린 이후의 변경 사항을 완전히 삭제!

 

커밋 취소 후 새로운 커밋 생성 (revert)

$ git revert <커밋 ID>​

 

  • `reset`은 과거로 되돌리는 것,
  • `revert`는 기존 기록을 유지하면서 새로운 버전 생성

2. 브랜치 (Branch)

2.1 브랜치란?

Git에서 브랜치는 독립적인 작업 공간을 의미
브랜치를 활용하면 기존 코드에 영향을 주지 않고 새로운 기능을 개발 가능.

 

현재 브랜치 확인

$ git branch

현재 master라는 브랜치를 쓰고있다. (기본 branch : master)

새로운 브랜치 생성

  • 브랜치를 생성하면 생성한 브랜치는 원래 속해있던 브랜치를 그대로 복사
$ git branch exp # exp는 본인이 정하는 이름

 

 

브랜치 이동

$ git checkout feature-branch
$ git checkout -b name # 브랜치 name을 만들고 거기로 checkout하겠다.

  • 기존에는 3개의 커밋이 있지만 master로 브랜치 바꾸면 다시 커밋은 2개가 됨.

(좌) branch : exp // (우) branch: master

 

  • exp 브랜치에 새로운 파일(b.txt)를 만들고 브랜치를 변경 시켜보자.
  • 브랜치에 따라 파일이 변함.

(좌) branch : exp // (우) branch: master

2.2 브랜치 정보 확인

  • 모든 브랜치의 커밋 내역을 한눈에 볼 수 있음
$ git log --branches --decorate --graph # 저장소의 모든 브랜치를 다 보여줌
$ git log --branches --decorate --graph --oneline # 간단 버전
  • master의 가장 최신 커밋이 '2' , exp의 가장 최신 커밋이 '4'
  • HEAD -> exp : 현재 exp 브랜치에 체크아웃되어있다.

  • master와 브랜치들 사이의 그래프

$ git log --branches --decorate --graph --oneline

2.3 브랜치 병합 (Merge)

브랜치 병합 과정

  1. 병합할 브랜치로 이동
$ git checkout master # exp -> master 병합하려면 master로 체크아웃하고 master에서 merge

   

   2. 브랜치 병합

  • 두 개의 부모 (2, 4)를 갖는 하나의 커밋이 만들어지면서, master는 5번과 exp의 4번을 모두 가짐
$ git merge exp

 

 

병합 후 브랜치 삭제

$ git branch -d exp

 

2.4 Stash (작업 보관)

  • 브랜치 작업이 덜 끝났는데, 다른 브랜치로 checkout해야할 때 stash 사용
  • 브랜치에서 수정한 파일을 커밋하지 않고 checkout했다면 영향이 master에게도 미침

 

 브랜치 변경 전에 임시로 작업 저장

$ git stash save # 작업중인 변경 사항들을 exp 브랜치에 세이브

 

 

 

저장된 작업 불러오기

$ git stash apply # 숨겨두었던 파일들이 다시 나타남

 

 

 

저장된 작업 목록 확인

$ git stash list​

 

저장된 특정 작업 삭제

$ git stash drop <stash@{번호}>

 

728x90
반응형
LIST