오늘은 버전 관리 시스템 git 이용 가이드를 간단 정리해보려 한다. git은 2005년에 리누스 토발즈(Linus Torvalds)가 만든 분산 버전 관리 시스템(DVCS: Distributed Version Control Systems)이다. 회사에서 일하거나 프로젝트 협업을 위해 git에 대한 이해는 필수!
git의 특징
git의 기본 기능은 이력 관리이다. 많은 프로그램이 ctrl+z(undo)와 ctrl+y(redo)를 제공하는데 git은 전체 소스 파일을 대상으로 해당 기능을 제공하고 협업에 필요한 다양한 기능을 가지고 있는 것이 특징이다.
기본 용어
- repository / repo : 저장소, 즉 git으로 버전 관리하는 디렉토리를 의미
- local repository : 로컬 저장소, 작업자의 개발 환경(PC)에 설정된 git 저장소
- remote repository : 원격 저장소, github 등 외부 서버에 설정된 git 저장소
- commit : 커밋, 특정 상태를 기록한 것, 즉 버전을 의미
- branch : 브랜치, 가지치기/갈래의 의미인데 또 다른 작업 공간을 의미
- merge : 머지, 병합/합치기, 특정 브랜치에서 작업한 내용을 또 다른 브랜치에 병합시키는 것을 의미
undo와 redo는 하나의 작업 이력 관리 시에 편리하지만, 여러가지 작업 버전을 관리하기엔 무리가 있다. git은 브랜치 기능을 통해 동시다발적으로 여러 작업 진행이 가능하게 하고, 이후에 합치고 충돌을 해결할 수 있게 해준다. 회사에서 새 기능을 만들거나 버그를 수정할 때 브랜치를 만들고 코드 리뷰 후 메인 브랜치에 머지하는 방식을 사용한다.
git 명령어
git init
: 로컬 git 저장소를 설정한다. (원하는 디렉토리에 git 저장소를 생성한 것)
git branch -M main
: 기본 브랜치 설정이 master인 경우 main 대신 master로 설정이 된다. 최근 master 대신 main이란 워딩으로 쓰는 추세이므로, 위 명령어로 브랜치명을 main으로 변경하자.
git status
: 현재 작업 중인 파일의 상태를 확인한다. 현재 브랜치(main)와 커밋 상태, 작업 중인 파일의 상태를 확인할 수 있고, untracked files(추적하지 않는 파일)이 존재하는 것도 확인할 수 있다.
git add .
// or
git add <filename>
: 파일의 변경사항을 인덱스(index)에 추가한다. git은 커밋하기 전 인덱스에 먼저 커밋할 파일을 추가한다.
git commit -m "message"
: 인덱스에 추가된 변경 사항을 이력에 추가한다. -m 옵션으로 메세지와 함께 커밋.
git log
: 전체 커밋 로그를 확인한다.
git reset {돌아가고 싶은 버전의 커밋 ID} --hard
: git reset에는 다양한 옵션이 존재(--hard / --soft / --mixed[-N] / --merge / --keep)하나 일단 hard 옵션 기준으로 설명하자면, 특정 커밋까지 이력을 초기화한다. 바로 전, 혹은 n번 전까지 작업했던 내용을 취소할 수 있다. 열심히 작업했는데 전혀 엉뚱한 걸 했거나 작업한 내용이 필요 없어질 때 사용한다.
이전 상태로 리셋할 경우 그 이후 이력은 지워지기 때문에 주의하자. git log로 커밋 ID를 조회할 수 있고, 돌아가고 싶은 버전의 커밋 ID를 입력하면 그 이후 커밋은 지워진다.
git revert {취소하고 싶은 버전의 커밋 ID}
: 특정 커밋을 취소하는 새로운 커밋을 만든다. 특정 커밋을 취소하면 그 이전 커밋으로 돌아간 것 같지만 기존 이력은 유지된다. 일반적으로 특정 버전을 배포했는데 문제가 생기면 문제가 생긴 커밋을 revert 한다. (빠른 조치/롤백) 다시 원복한 상태로 작업을 이어서 하고 해당 문제를 수정하면 다시 커밋하는 방식을 사용한다.
git remote add <name> <url>
// git remote add origin https://github.com/your.url
git push -u origin main
: 앞에서 작업한 로컬 저장소를 github에 푸시한다. 로컬 저장소의 커밋 목록이 그대로 복제된다. (위는 첫 세팅을 위한 명령어)
- main 브랜치에 원격 저장소(github)를 origin(기본)으로 설정한다.
- 설정한 원격 저장소에 로컬 저장소의 모든 커밋을 푸시한다. -u 옵션을 이용해 이후에 푸시할 땐 별다른 원격 저장소 이름을 지정하지 않고 git push를 사용할 수 있다.
git add .
git commit -m "message"
git push
: 위 -u 옵션 설정을 했다면 이후에는 git push만으로 커밋하면 된다.
cd ..
git clone <repository> [<directory>]
: 원격 저장소를 로컬로 가져온다. cd .. 로 상위 디렉토리로 이동하고, 원격 저장소의 주소(github 저장소에서 code를 눌러 확인한다.)를 확인하여 git clone을 해준다. 두 번째 인자로 지정한 디렉토리에 원격 저장소의 내용이 복제된다. 두 번째 인자를 비우면 원격 저장소의 이름을 그대로 사용한다.
cd ..
cd <directory>
git pull [<repository> [<refspec>...]]
: 원격 저장소에 변경된 내용을 로컬 저장소로 가져온다. git은 자동으로 원격 저장소와 로컬 저장소를 동기화하지 않는다. 원하는 디렉토리로 이동하여 원격 저장소 pull 명령어를 입력하여 변경사항을 로컬로 가져온다. 원격 저장소와 로컬 저장소의 차이가 커지면 나중에 충돌이 많이 발생하기 때문에 git pull은 자주 수행하는 것이 좋다.
'Today I Learned' 카테고리의 다른 글
HTTP 요청 메소드 (0) | 2023.10.05 |
---|---|
브라우저의 동작 원리 (0) | 2023.09.27 |
[git] git flow - 브랜치 전략 (0) | 2023.09.15 |
[git] branch merge 방법과 특징 (0) | 2023.09.13 |
초보 비전공자 개발 프론트엔드 입문하기 (2) | 2023.06.16 |