이 글에서는 git의 기본 명령어들에 대해서 정리하고, 협업시 지켜야할 기본 규칙들에 대해 설명해 보겠습니다.
Git을 왜 사용하나요?
(이제는 모두가 당연하게 git을 사용하기 때문에, 다른 버전관리 시스템과 git과의 차별점은 다루지 않겠습니다.)
git을 사용함으로써 얻을 수 있는 이익은 다음과 같습니다.
- 각자가 작업한 내용을
쉽고 명확하게 합칠수 있습니다. - 코드를 버전별로 저장하고 특정 시점으로 돌아갈 수 있습니다.
- 저장된 코드 기록을 쉽게 열람할 수 있습니다.
따라서, git은 위의 3가지 장점을 극대화하는 방향으로 활용해주시면 됩니다.
Git의 3가지 상태
git에서 관리되는 파일들은 modified, staged, commited라는 3가지 상태를 가집니다.
- modified: 말 그대로 파일이 수정된 상태입니다.
- staged: 수정된 파일이 staging area로 올라간 상태입니다.
- commited: 커밋된 상태입니다. staged 상태인 파일만 커밋할 수 있습니다.
자주 사용하는 명령어들
1. 저장소
# 저장소 생성
$ git init
# 원격 저장소로부터 복제
$ git clone (url)
# 원격 저장소 추가
git remote add origin (url)
2. 파일 상태 변경
# 변경 상태 체크
git status
# 특정 파일 stage
git add (file-name)
# 변경된 모든 파일 stage
git add *
# 모든 stage 취소
$ git reset HEAD *
# 커밋
git commit -m "message"
# 원격 저장소로 커밋 업로드
git push origin (branch-name)
# 원격 저장소의 내용 가져와 병합하기
git pull origin (branch-name)
3. 커밋 (상세)
# 커밋 취소
$ git reset HEAD^ // 마지막 커밋 삭제
$ git reset --soft HEAD^ // 마지막 커밋을 staged 상태로 변경
$ git reset --hard HEAD // 마지막 커밋 상태로 되돌림
# 마지막 커밋 내용 변경 + 메세지 수정
$ git commit --amend
# 커밋 로그
$ git log // 모든 커밋로그 확인
$ git log -3 // 최근 3개 커밋로그 확인
$ git log --oneline // 각 커밋을 한 줄로 표시
$ git reflog // reset 혹은 rebase로 없어진 과거의 커밋 이력 확인
# 커밋 로그 (상세한 변경점 포함)
$ git show
# 커밋 합치기
$ git rebase -i HEAD~4 // 최신 4개의 커밋을 하나로 합치기
4. stash
# stage 상태인 파일들을 임시 저장
$ git stash
# stash 목록
$ git stash list
# stash 가져오기
$ git stash pop // 가장 최근의 stash를 가져오고 제거한다.
$ git stash apply // 가장 최근의 stash를 가져오고 제거하진 않는다.
# stash 삭제
$ git stash drop // 가장 최근의 stash를 삭제한다.
5. 브랜치
# 브랜치 이동
$ git checkout (branch-name)
# 브랜치 목록
$ git branch // 로컬
$ git branch -r // 리모트
$ git branch -a // 로컬 + 리모트
# 브랜치 생성
$ git checkout -b (branch-name)
# 리모트 브랜치 가져오기
$ git remote update // remote branch ref를 업데이트한다. (fetch)
$ git checkout -t origin/(branch-name)
# 브랜치 삭제
$ git branch -D (branch-name)
# 브랜치 이름 변경
$ git branch -m (branch-name)
알아두면 유용한 꿀팁
git commit —amend를 사용해 커밋 메세지뿐만 아니라 내용을 수정, 추가할 수도 있습니다.
# 마지막 커밋 내용에 a.txt를 추가하고 메세지는 변경하지 않음.
$ git add ./a.txt
$ git commit --amend --no-edit // —-no-edit 를 적어주면 커밋 메세지 수정을 안하게 됩니다.
- 리모트에 반영된 커밋들의 히스토리를 변경하지 마세요.
커밋 히스토리를 변경하면 작업중이던 다른 사람들도 영향을 받습니다.
- 커밋은 자주, push는 필요할 때만 하세요.
일단 push를 해버리면 변경점을 되돌리기 쉽지 않습니다.
또, git 저장소에 CI/CD가 설정되어 있는 경우 불필요한 자원 낭비가 발생할 수 있습니다.