게시:

1. Git 설치부터 Commit까지

1.1. 설치

설치여부 확인

  • 터미널에서 다음 명령어를 사용하여 Git 설치여부를 확인한다.
  • 설치되어 있는 경우 터미널에 git version x.x.x형태로 버전이 표시된다.
$ git --version 

설치

  • Git 공식 사이트에 방문하여 운영체제에 맞는 Git을 설치한다.
  • Home brew 사용자는 터미널에서 아래 명령을 사용하여 설치 가능하다.
$ brew install git

사용자 설정

$ git config --global user.name "이름"
$ git config --global user.email "이메일"

1.2. 저장소(Repository) 생성하기

  • 프로젝트를 관리할 디렉터리로 이동 또는 생성한다.
  • git init 명령어로 로컬 저장소(Local repository)를 생성한다.
    • 정상적으로 수행하면 .git 이라는 파일이 생성된다.
$ git init

1.3. 스테이징(Stage)

  • 스냅샷을 남기기(Commit) 위한 사전 작업이다.
    • 버전 관리할 워킹 디렉토리의 내용을 Staging area로 이동시키는 것을 스테이징이라고 한다.

추적상태 확인

  • git status 명령어로 스테이징 상태(추적상태)를 확인한다.
git status
git status 명령어 입력시 나타나는 화면

경고: 보안이 필요한 문서, SSH 파일 등 트래킹하면 안되는 파일이나, 본인이 버전관리를 원치 않는 파일은 스테이징 전에 .gitignore 파일에 등록하여 트래킹 제외시킨다.

스테이징

  • git add 명령어로 스테이징할 파일을 선언한다.
# 개별 등록
$ git add <파일1> <파일2> <파일3> ...

# 일괄 등록
$ git add .

스테이징 취소(Unstage)

  • git reset HEAD 명령어로 git add .를 취소할 수 있다.
    • HEAD는 현재 Branch를 가리키는 포인터로 가장 마지막 커밋을 가리킨다.
# 개별 언스테이징
$ git reset HEAD <파일1> <파일2> <파일3> ...

1.4. 커밋(Commit)

커밋 생성

  • 스테이징을 한 뒤 git commit 명령어로 새로운 커밋을 생성한다.
    • git commit 명령어는 새로운 커밋을 생성하고 HEAD가 가리키는 브랜치가 새로운 커밋을 가리키도록 업데이트한다.
# 단문 커밋 메시지로 충분할 떄
$ git commit -m "커밋 메시지"

# 장문 커밋 메시지를 남기고 싶을 떄(VI 에디터)
$ git commit

# 커밋 메시지 수정
$ git commit --amend

커밋 로그(Commit log)

  • git log 명령어로 커밋 결과를 확인한다.
# 기본보기
$ git log

# 한 줄로 보기
$ git log --oneline

커밋 취소

  • git reset HEAD 명령어로 커밋을 되돌릴 수 있다.
    • git reset 명령어는 HEAD가 가리키는 브랜치를 변경한다.
# 되돌리기 : Commit / 유지 : Stage, Working directory
$ git reset --soft HEAD~

# 되돌리기 : Commit, stage / 유지 : Working directory
$ git reset --mixed HEAD~

# 되돌리기 : Commit, stage, Working directory
$ git reset --hard HEAD^
git status 명령어 입력시 나타나는 화면

2. 브랜치(Branch) 만들기부터 병합까지

“분기”라는 뜻처럼 조상 커밋으로부터 분기된 가상의 독립공간이다.
정확히는 커밋 사이를 오갈 수 있는 포인터 같은 것으로 브랜치를 옮기면(Check out) HEAD가 가리키는 포인터가 변경된다. 브랜치를 옮겨도 분기 후 변경사항이 발생하기 전(커밋하기 전) 까지는 동일한 커밋을 가리킨다.

2.1. 브랜치 생성

  • git branch 명령어로 브랜치를 생성한다.
    • git init 명령어를 실행하면 기본적으로 main(구 master) 브랜치가 만들어진다.
$ git branch <브랜치 이름>
  • git branch 명령어로 생성 결과를 확인한다.
$ git branch

브랜치 전환

  • git checkout 명령어로 브랜치를 전환한다.
    • 정확히는 HEAD가 가리키는 브랜치가 바뀌는 것이다.
    • 전환 이후 커밋은 다른 브랜치와 병합하지 않는 이상 다른 브랜치에 적용되지 않는다.
  • 커밋되지 않은 경우 브랜치 전환이 불가하다.
$ git checkout <브랜치 이름>

브랜치 삭제

  • git branch -D 명령어로 브랜치를 삭제한다.
    • 병합이 끝나는 등 더 이상 필요없는 브랜치를 삭제할 때 사용한다.
$ git branch -D <브랜치 이름>

2.2. 병합

Merge 병합

  • git merge 명령어로 브랜치를 병합한다.
    • Main이 가리키는 커밋이 브랜치의 바로 직전 조상커밋인 경우(변경사항이 없는 경우)에는 단순히 Main의 포인터가 바뀐다.
    • Main이 가리키는 커밋이 브랜치의 바로 직전 조상커밋이 아닌 경우(변경된 경우)에는 공통조상 커밋(Common), 메인 브랜치 커밋(Main), 분기 브랜치 커밋(Branch)이 병합된 새로운 커밋을 만들고 직전 메인 브랜치 커밋(Main)과 분기 브랜치 커밋(Branch)를 가리킨다.
$ git checkout <기준 브랜치>
$ git merge <병합할 브랜치>

Merge 취소

  • git reset --merge 명령어로 직전 병합을 취소한다.
$ git reset --merge ORIG_HEAD

Rebase 병합

  • git rebase 명령어로 브랜치를 병합한다.
    • Merge는 새로운 커밋을 만들고 이전 메인 커밋, 분기 브랜치 커밋과 새로운 커밋을 연결하는 것이다.
    • Rebase는 분기 브랜치(Branch)의 최종 커밋이 병합 대상 브랜치(Main)의 최종 커밋을 가리키게 한 뒤 병합 대상 브랜치(Main)의 변경사항을 분기 브랜치(Branch) 적용한 뒤 Main 브랜치 HEAD를 분기 브랜치(Branch) 커밋으로 바꾸는 것이다.
  • 원격 저장소(Remote repository)의 Origin main이 변경된 경우 PR 전 주로 사용한다.
    • fetch 또는 pull 후 분기 브랜치 커밋을 업데이트된 Main 커밋으로 연결
  • 커밋 히스토리를 정리할 때도 사용한다.
$ git checkout <기준 브랜치>
$ git rebase -i <병합할 브랜치>

경고: 이미 GitHub에 Push한 Commit은 Rebase를 하지 말 것. 대환장 파티의 시작이다.

Rebase continue

  • git rebase --continue 명령어로 중단된 리베이스를 이어서 할 수 있다.
    • 내가 작업한 부분과 Origin main의 변경사항이 같은 부분인 경우 충돌(Conflict)이 발생한다.
$ git rebase --continue

Rebase 취소

  • git rebase --abort 명령어로 리베이스 이전 단계로 되돌아간다.
$ git rebase --abort

댓글남기기