Git workflow(Git Area)는 기본적으로 3단계로 나눠져 있다.
git init
: 저장소 만들기
git status
: 현재 상태 확인
git add [-A] [<pathspec>…]
현재 상태 추적
파일의 변경사항을 인덱스(staging area)에 추가합니다. Git은 커밋하기전, 인덱스에 먼저 커밋할 파일을 추가합니다.
git commit [-m <msg>]
: 현재 상태 저장
인덱스에 추가된 변경 사항을 이력에 추가.
깃 커밋 수정하고싶을땐 git commit --amend
사용하면된다.
git log
: 이력 확인
다양한 오셥을 조합하여 원하는 형태의 로그를 풀력할 수 있는 강력한 기능.
git reset[<commit>] [--soft | --mixed [-N] | --hard | --merge | --keep]
: 이전 상태로(이력 제거)
: 커밋기록 아이디 예: 27a00b7
특정 커밋까지 이력을 초기화합니다. 바로 전, 또는 n번 전까지 작업했던 내용을 취소할 수 있습니다. 열심히 작업했는데, 전혀 엉뚱한 걸 했거나 작업한 내용이 필요 없어질 때 사용합니다. ⚠️ 이력이 지워지기 때문에 주의
커밋 취소 앞에 한개할 경우: git reset HEAD~ 1
git reflog
git의 모든 브랜치에서 있었던 지금까지의 모든 기록을 볼 수 있다 각각 HEAD@{index} 형태로 index를 가지고 있으니, 잘못되기 전에 해당하는 index를 찾고 git reset HEAD@{index}
사용하여 돌아가기
이 기능은 실수로 지운 파일을 되돌리거나, 뭔가 잘못 수정한 걸 되돌리거나, 실수로 머지한 걸 되돌리거나, 다 됐고 그냥 잘 작동했던 때로 돌아가고 싶을 때 사용하면 된다. 실제로 reflog
를 많이 사용한다고 들었다
git revert <commit>…
: 이전 상태로(이력 유지)
특정 커밋을 취소하는 새로운 커밋을 만듭니다. 여기선 3번 커밋을 취소하는 새로운 커밋을 생성하여 마치 2번 커밋 상태로 돌아간 것 같지만 기존 이력을 유지하는 모습을 확인합니다.
일반적으로 특정 버전을 배포했는데 문제가 생기면 문제가 생긴 커밋을 revert
합니다. (빠른 조치/롤백) 다시 원복한 상태로 작업을 이어서 하고 해당 문제를 수정하면 다시 커밋하는 방식을 사용합니다.
git branch 새로운 브랜치 이름
새로운 브랜치 생성
git branch
: 브랜치 목록 확인git branch -d 삭제할 브랜치
git switch -c
: 브랜치 생성 및 이동
‘-c’ 옵션은 브랜치 생성과 동시에 이동을 한번에 수행합니다.
git merge 브랜치 이름
: 브랜치 병합
예) dev브랜치를 main 브랜치로 병합하고 싶으면 main 브랜치 상태에서 git merge dev
해주자.
git rebase <메인브랜치> <이동할 브랜치>
merge와 rebase의 차이점:
말 그대로 branch base를 이동시킨다는 뜻으로, 머지처럼 브랜치 통합을 목적으로 하지만, 특정 시점으로 브랜치가 가리키는 곳을 변경하는 기능을 합니다.
그림에서 보이는 것과 같이 feature/login 브랜치에서 git rebase main feature/login 명령어를 입력하면 main의 가장 최신 커밋으로 브랜치가 가리키는 곳이 변경됩니다. (main의 다른 커밋에서 충돌이 없을 경우)
conflict
: 충돌 해결
대부분 협업을 할때 서로 다른 작업을 하므로 보통 문제없이 자동으로 머지됩니다. 하지만, 같은 파일을 부득이 수정하는 경우가 생기고 필연적으로 충돌이 발생하는데, 강제로 상황을 만들고 충돌을 해결하는 방법을 알아보겠습니다.
충돌은 정말 마주치고 싶지 않은 상황입니다. 하지만, 상황이 발생했으면 해결을 해야겠죠.
충돌을 해결하고 커밋을 하거나, 머지 작업을 취소 git merge --abort
할 수 있습니다.
git remote add <name> <url>
:
Git은 여러 개의 원격 저장소를 등록할 수 있고 기본 저장소의 이름이 origin
입니다. GitHub을 메인 원격 저장소(origin)로 사용하고 Google Cloud에 추가로 원격 저장소 설정을 한다면 google
이라는 이름을 사용할 수 있습니다.
git remote add origin <url>
git remote add google <google reository url>
git push [-u | --set-upstream] [<repository> [<refspec>…]]
:원격 저장소 저장
로컬 저장소를 GitHub에 푸시합니다. 로컬 저장소의 커밋 목록이 그대로 복제될 예정입니다.
git clone <repository> [<directory>]
: 원격 저장소 복제
원격 저장소를 로컬로 가져오는 명령어
git pull [<repository> [<refspec>…]]
: 원격 저장소 내용 가져오기
원격 저장소에 변경된 내용을 로컬 저장소로 가져옵니다. Git은 자동으로 원격 저장소와 로컬 저장소를 동기화하지 않습니다. 명시적으로 명령어를 입력해야 합니다.
개인이 정한 커밋메세지 규칙
커밋 유형 지정
- FEAT : 새로운 기능의 추가
- FIX: 버그 수정
- DOCS: 문서 수정
- STYLE: 스타일 관련 기능(코드 포맷팅, 세미콜론 누락, 코드 자체의 변경이 없는 경우)
- REFACTOR: 코드 리펙토링
- TEST: 테스트 코트, 리펙토링 테스트 코드 추가
- CHORE: 빌드 업무 수정, 패키지 매니저 수정(ex .gitignore 수정 같은 경우)