git 용어 정리
워킹 트리(working tree)
- 워킹 트리, 워킹 디렉토리, 작업 디렉토리, 작업 폴더 모두 같은 뜻
- 사용자가 파일과 하위 폴더를 만들고 작업 결과물을 저장하는 곳
- 공식문서에서는 'commit을 체크아웃하면 생성되는 파일과 디렉토리'로 정의
- 작업 폴더에서 ".git" 폴더를 제외한 나머지 부분이 워킹 트리
로컬 저장소(local repository)
- git init 명령으로 생성되는 ". git" 폴더
- 커밋, 커밋을 구성하는 객체, 스테이지가 모두 이 폴더에 저장
원격 저장소(remote repository)
- 로컬 저장소를 업로드하는 곳
- GitHub, GitLab과 같은 저장소가 원격 저장소
작업 폴더
- 워킹 트리 + 로컬 저장소
Staging Area
- 해당 내용은 링크를 참고해주시면 감사하겠습니다.
Head
- 다른 버전 관리 시스템과는 달리 Git은 'HEAD’라는 특수한 포인터가 있습니다.
- 이 포인터는 지금 작업하는 local branch를 가리킵니다.
git CLI 명령어 정리
* <>와 같이 부등호가 있는 인자는 필수 인자이고 []와 같이 대괄호 사이에 있는 인자는 옵션 인자입니다.
git status
- git 워킹 트리의 상태를 보는 명령
- 워킹 트리가 아닌 폴더에서 실행하면 에러 발생
git status -s
- git status와 유사하나 워킹 트리의 상태를 요약해서 보여주는 명령
- 변경된 파일이 많을 때 유용
git init
- 현재 폴더에 git 저장소 생성
- 현재 폴더에는 ". git"이라는 숨김 폴더가 생성되는데 이 폴더가 로컬 저장소
git config
- 옵션 설정하는 명령어
명령어 | 설명 |
git config --global <옵션명> | 지정한 전역 옵션의 내용 조회 |
git config --global <옵션명> <새로운 값> | 지정한 전역 옵션의 값을 새로 설정 |
git config --global --unset <옵션명> | 지정한 전역 옵션 삭제 |
git config --local <옵션명> | 지정한 지역 옵션의 내용 조회 |
git config --local <옵션명> <새로운 값> | 지정한 지역 옵션의 값을 새로 설정 |
git config --local --unset <옵션명> | 지정한 지역 옵션의 값 삭제 |
git config --system <옵션명> | 지정한 시스템 옵션의 내용 조회 |
git config --system <옵션명> <값> | 지정한 시스템 옵션의 값 새로 설정 |
git config --system --unset <옵션명> <값> | 지정한 시스템 옵션의 값 삭제 |
git config --list | 현재 프로젝트의 모든 옵션 조회 |
git add 파일 1 파일 2...
- 파일들을 stage에 추가
- 새로 생성한 파일을 stage에 추가하고 싶다면 반드시 add 명령 사용
git commit
- stage에 있는 파일들을 commit
git commit -a
- add 명령을 생략하고 바로 commit
- 변경된 파일과 삭제된 파일은 자동으로 staging 되고 commit
- untracked 파일은 커밋되지 않음
git push [-u] [원격 저장소명] [브랜치명]
- 현재 branch에서 새로 생성한 commit들을 원격 저장소에 업로드
- -u 옵션을 통해 브랜치의 upstream을 등록 가능
- 한 번 등록한 후에는 git push만 입력해도 됨
git pull
- 원격 저장소의 변경사항을 워킹 트리에 반영
- git pull = git fetch + git merge
git fetch [원격 저장소명] [브랜치명]
- 원격 저장소의 branch와 commit들을 로컬 저장소와 동기화
- 옵션을 생략하면 모든 원격 저장소에서 모든 브랜치를 가지고 옴
git merge 브랜치명
- 지정한 branch의 commit들을 현재 branch 및 워킹 트리에 반영
git reset [파일명]...
- staging area에 있는 파일들을 stage에서 내립니다. (unstaging)
- 워킹 트리의 내용은 변경 X
- 옵션을 생략할 경우 stage의 모든 변경사항 초기화
- reset에는 세 가지 옵션이 존재 (soft, mixed, hard)
git log
- 현재 branch의 commit 이력을 보는 명령어
git log -n<숫자>
- 전체 commit 중에서 최신 n개의 commit만 조회
- 다양한 옵션 조합해서 사용 가능
git log --oneline --graph --decorate --all
- git log 옵션
- --oneline
- commit 메시지를 한 줄로 요약해서 조회
- 생략 시 commit 정보를 자세히 표시
- --graph
- commit 옆에 branch의 흐름을 그래프로 보여줌
- GUI와 비슷한 모습으로 나옴
- --decorate
- --decoreate=short 옵션을 의미
- branch와 tag 등의 참조를 간결히 표시
- --all
- all 옵션이 없을 경우 HEAD와 관계없는 옵션은 보여주지 않음
git log 명령어 예시 | 설명 |
git log | HEAD와 관련된 commit들이 자세하게 나옴 |
git log --oneline | 간단히 commit 해시와 제목만 보고 싶을 때 |
git log --oneline --graph --decorate | HEAD와 관련된 commit들을 조금 더 자세히 보고 싶을 때 |
git log --oneline --graph --all --decorate | 모든 branch들을 보고 싶을 때 사용하는 명령어 |
git log --oneline -n7 | 내 branch의 최신 commit을 7개만 보고 싶을 때 사용 |
git help <명령어>
- 해당 명령어의 도움말을 표시
- 도움말에는 명령의 의미와 세부적인 옵션들을 매우 자세하게 표시
git remote add <원격 저장소명> <원격 저장소 주소>
- 원격 저장소 등록
- 원격 저장소는 여러 개 등록 가능하지만 같은 alias의 원격 저장소는 하나만 가질 수 있음
- 통상 첫 번째 원격 저장소를 origin으로 지정
git remote -v
- 원격저장소 목록 조회
git clone <저장소 주소> [새로운 폴더명]
- 저장소 주소에서 프로젝트를 복제해 오는 명령어
- 새로 생길 폴더명은 생략 가능하며 폴더명을 생략하면 프로젝트 이름과 같은 이름의 폴더가 새로 생성
- 저장소 주소는 꼭 원격일 필요가 없으며 로컬 저장소도 git clone 명령으로 복제 가능
git branch [-v]
- 로컬 저장소의 branch 목록을 보는 명령으로 -v 옵션을 사용하면 마지막 commit도 함께 표시
- 표시된 branch 중에서 이름 왼쪽에 * 가 붙어 있으면 HEAD 브랜치
git branch [-f] <브랜치명> [커밋 체크섬]
- 새로운 branch를 생성
- commit checksum 값을 주지 않으면 HEAD로부터 branch를 생성
- 이미 있는 branch를 다른 commit으로 옮기고 싶을 때는 -f 옵션을 부여
* commit checksum: git log를 찍었을 때 commit을 가리키는 문자열 (git log 사진에서 db6ec55와 같은 문자열이 체크섬)
git branch -r[v]
- 원격 저장소에 있는 branch를 조회하고 싶을 때 사용
- 마찬가지로 -v 옵션을 추가하여 commit 요약 확인 가능
git checkout <브랜치명>
- 특정 branch로 checkout 할 때 사용
- branch명 대신 commit checksum을 쓸 수도 있음
- 하지만 branch명을 쓰는 방법을 강력히 권장
git checkout -b <브랜치명> <커밋 체크섬>
- 특정 commit에서 branch를 새로 생성하고 동시에 checkout
- 두 명령을 하나로 합친 명령
git merge <대상 브랜치>
- 현재 branch와 대상 branch를 병합할 때 사용
- merge commit이 새로 생기는 경우가 많음
git rebase <대상 브랜치>
- 내 branch의 commit들을 대상 branch에 재배치
- 히스토리가 깔끔해져서 자주 사용하지만 원격 저장소에서는 사용 안 하는 것을 권장
- 예를 들자면 a 커밋을 원격 저장소에 push 하고 rebase를 하게 되면 원격에는 a가 존재하고 로컬에는 다른 커밋인 a`가 생성됩니다. 이때 내가 아닌 다른 개발자가 원격 저장소에 있던 a를 merge할 수 있고 이 때 변경된 a`도 언젠가는 원격 저장소에 push가 될 텐데 그럼 원격 저장소에는 실상 같은 commit이었던 a와 a`가 동시에 존재하게 됩니다. 이 때문에 원격 저장소에서는 rebase를 사용하지 않는 것을 권장합니다.
git branch -d <브랜치명>
- 특정 branch를 삭제할 때 사용
- HEAD branch나 merge가 되지 않은 branch는 삭제 불가능
git branch -D <브랜치명>
- branch를 강제로 삭제하는 명령
- -d로 삭제할 수 없는 branch를 지우고 싶을 때 사용
- 강제성이 있는 만큼 사용 시 주의
git reset --hard <이동할 커밋 체크섬>
- 현재 branch를 지정한 commit으로 이동
- 작업 폴더 내용도 함께 변형
- commit checksum 대신 HEAD~, HEAD^ 부여 가능
- HEAD~<숫자>
- HEAD~는 HEAD의 부모 commit, HEAD~2는 HEAD의 할아버지 commit
- HEAD~n은 n 번째 위쪽 조상
- HEAD^<숫자>
- HEAD^은 똑같이 부모 commit
- 반면 HEAD^2는 두 번째 부모 즉, merge commit처럼 부모가 둘 이상인 commit에만 유효
- HEAD~<숫자>
git tag -a -m <간단한 메시지> <태그 이름> [브랜치 또는 체크섬]
- -a로 주석 있는 태그를 생성
- 메시지와 tag 이름은 필수이며 branch 이름을 생략하면 HEAD에 tag 생성
git push <원격 저장소명> <태그 이름>
- 원격 저장소에 tag를 업로드
[출처]
팀 개발을 위한 Git GitHub 시작하기 [한빛미디어]
'[DEV] 기록' 카테고리의 다른 글
[RestTemplate] "[circuit_breaking_exception][parent]" Data too large, data for "[<http_request>]" would be error (0) | 2021.02.21 |
---|---|
[elastic search] document 10,000개 이상 검색 하는 방법 (1) | 2021.02.05 |
구글 크롬(Chrome) 응답없음 발생 시 해결 방법 (2) | 2021.01.29 |
[Java 8] yyyyMMddHHmmssSSS LocalDateTime parse 버그 (0) | 2021.01.27 |
[javascript] window.onbeforeunload 페이지를 벗어날 때 이벤트 처리 (1) | 2021.01.27 |