Command Line Interface
출처
https://webclub.tistory.com/120?category=546348 [Web Club]
https://gocoder.tistory.com/1629
https://gocoder.tistory.com/1629 [고코더 IT Express]
☑️ git 워킹 트리(working tree)
- 워킹 트리, 워킹 디렉토리, 작업 디렉토리, 작업 폴더 모두 같은 뜻
- 사용자가 파일과 하위 폴더를 만들고 작업 결과물을 저장하는 곳
- 공식문서에서는 'commit을 체크아웃하면 생성되는 파일과 디렉토리'로 정의
- 작업 폴더에서 ".git" 폴더를 제외한 나머지 부분이 워킹 트리
☑️ 로컬 저장소(local repository)
git init 명령으로 생성되는 ". git" 폴더
커밋, 커밋을 구성하는 객체, 스테이지가 모두 이 폴더에 저장
☑️ 원격 저장소(remote repository)
로컬 저장소를 업로드하는 곳
GitHub, GitLab과 같은 저장소가 원격 저장소
☑️ 작업 폴더
워킹 트리 + 로컬 저장소
☑️ Staging Area
스테이징 영역
☑️ Head
다른 버전 관리 시스템과는 달리 Git은 'HEAD’라는 특수한 포인터가 있습니다.
이 포인터는 지금 작업하는 local branch를 가리킵니다.
💻 git status
git 워킹 트리의 상태를 보는 명령
워킹 트리가 아닌 폴더에서 실행하면 에러 발생💻 git status -s
git status와 유사하나 워킹 트리의 상태를 요약해서 보여주는 명령
변경된 파일이 많을 때 유용💻 git init
현재 폴더에 git 저장소 생성
현재 폴더에는 ". git"이라는 숨김 폴더가 생성되는데 이 폴더가 로컬 저장소📌 create a new repository on the command line
💻 git init
💻 git addfile
💻 git commit -m commit message
💻 git branch -M main
💻 git remote add originrepository URL
💻 git push -u origin main📌 push an existing repository from the command line
💻 git remote add origin
repository URL
💻 git branch -M main
💻 git push -u origin main📌 git config
옵션 설정하는 명령어
💻 git config --global core.autocrlf input
macOS 개행문자(Newline) 설정
💻 git config --global core.autocrlf true
Windows 개행문자(Newline) 설정
💻 git config --global user.name '(git ID)'
💻 git config --global user.email '(git에 등록한 email)'
사용자정보, 커밋(버전생성)을 위한 정보 등록
💻 git config --global --list
Q키를 눌러서 종료 or 구성확인
💻 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 옵션
💻 git log --oneline
commit 메시지를 한 줄로 요약해서 조회
생략 시 commit 정보를 자세히 표시💻 git log --graph
commit 옆에 branch의 흐름을 그래프로 보여줌
GUI와 비슷한 모습으로 나옴💻 git log --decorate
--decoreate=short 옵션을 의미
branch와 tag 등의 참조를 간결히 표시💻 git log --all
all 옵션이 없을 경우 HEAD와 관계없는 옵션은 보여주지 않음
💻 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에만 유효💻 git tag -a -m <간단한 메시지> <태그 이름> [브랜치 또는 체크섬]
-a로 주석 있는 태그를 생성
메시지와 tag 이름은 필수이며 branch 이름을 생략하면 HEAD에 tag 생성💻 git push <원격 저장소명> <태그 이름>
원격 저장소에 tag를 업로드