개발자라면 필수적으로 알아야할 Git(버전 관리 시스템) 개념 및 명령어 정리

in #kor-join4 years ago

git-13-569377.png

GIT

  • VCS(Version Control System) - 파일의 변화를 시간에 따라 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템
    • 각 파일을 이전 상태로 되돌리기
    • 프로젝트를 이전 상태로 되돌리기
    • 시간에 따라 수정 내용 비교
    • 누가 문제를 일으켰는지 추적
    • 파일을 잃어버렸거나 잘못 수정했을 때 쉽게 복구가능

3가지 상태

  • Committed란 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미
  • Modified는 수정한 파일을 아직 로컬 데이터베이스에 커밋하지 않은 것
  • Staged란 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미

3가지 단계

  • .git directory : Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳
  • working tree : 프로젝트의 특정 버전을 Checkout 한 것
  • Staging Area (Index) : 단순한 파일이고 곧 커밋할 파일에 대한 정보를 저장

Window에서 리눅스 환경으로 실습하기 위해 ubuntu를 설치

https://ubuntu.com/wsl

git 설치

apt-get install git

git 버전 확인

git --version

사용자 정보 설정

$ git config --global user.name "John Doe"
$ git config --global user.email [email protected]

편집기 설정 (32bit NotePad 기준)

$ git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -nosession"

설정 확인

git config --list

도움말 보기

git help <verb>
man git-<verb>

git help config

각 명령에서 사용할 수 있는 옵션들 확인 (간략 -h, 자세히 -help)

git add -h
git add -help

git 저장소 만들기

git init

기존 저장소를 clone 하기

git clone https://github.com/libgit2/libgit2

파일의 상태 확인하기

git status

파일의 상태를 간략하게 확인하기

git status -s

파일을 새로 추적하기 (README.md 파일 생성 후)

echo "test" > README.md
git add README.md

파일 무시하기 (gitignore)

# 확장자가 .a인 파일 무시
*.a

# 윗 라인에서 확장자가 .a인 파일은 무시하게 했지만 lib.a는 무시하지 않음
!lib.a

# 현재 디렉토리에 있는 TODO파일은 무시하고 subdir/TODO처럼 하위디렉토리에 있는 파일은 무시하지 않음
/TODO

# build/ 디렉토리에 있는 모든 파일은 무시
build/

# doc/notes.txt 파일은 무시하고 doc/server/arch.txt 파일은 무시하지 않음
doc/*.txt

# doc 디렉토리 아래의 모든 .pdf 파일을 무시
doc/**/*.pdf

수정했지만 아직 staged 상태가 아닌 파일 비교

git diff

커밋하기

git commit -m "메시지 첨부"
git commit -a //git add를 생략할 수 있음

파일 삭제하기(stageing area, working directory에서 삭제)

git rm README.md

파일 이름 변경하기

git mv README.md README

커밋 히스토리 조회하기

git log -p // 각 커밋의 diff 결과 출력
git log --stat // 각 커밋의 통계정보 출력
git log --pretty=oneline // 기본형식 이외에 다른 형식으로 볼 수 있음
git log --pretty=format:"%h - %an, %ar : %s"
git log --graph // 아스키 그래프를 출력

git log 주요 옵션

되돌리기 (완료한 커밋을 수정해야 할 때)

git commit -m 'initial commit'
git add forgotten_file
git commit --amend

Modified 파일 되돌리기

git checkout -- CONTRIBUTING.md

리모트 저장소 확인하기 (v까지 줘야 단축이름과 URL까지 모두 확인 가능)

git remote -v

리모트 저장소 추가하기

git remote add pb https://github.com/paulboone/ticgit

리모트 저장소에서 데이터 가져오기

git fetch <remote>

리모트 저장소에 push 하기

git push origin master

리모트 저장소 살펴보기

git remote show origin

리모트 저장소 이름 변경

git remote rename pb paul

리모트 저장소 삭제

git remote remove paul