깃 저장소로 변경 (경로명을 입력하지 않으면 현재 폴더에서 초기화 됨)
$ git init (경로명) -- 저장소 초기화
$ git config --global user.name "이름"
$ git config --global user.email "이메일"
$ git status
변경 후에 따로 스테이지에 올리지 않아도 된다. (tracked 상태 유지됨)
$ git mv 파일명 새로운파일명
파일을 Stage에 등록
$ git add 파일명
전체 파일을 Stage에 등록
$ git add .
Stage에서 등록 해제
$ git rm --cached 파일명
$ git commit
stage에 등록이 되지 않은 파일을 커밋하려면, -a
옵션을 통해 등록과 커밋을 동시에 할 수 있다.
$ git commit -a
커밋 메시지는 vi에디터를 통해 입력 가능하다.
- 내용을 입력하기 위해 ESC를 누른 후 i 입력하여 INSERT 상태로 변경
- 작성을 마친 후, 저장 + 종료를 위해 ESC를 누른 후 :wq 를 입력
-m
옵션을 사용하면 위의 과정 없이 간단하게 메시지와 함께 커밋을 할 수 있다.
$ git commit -m "메시지 내용"
-a
, -m
옵션은 -am
옵션으로 동시에 사용될 수 있다.
$ git commit -am "메시지 내용"
시간 순으로, 최신 커밋 기록부터 내림차순으로 출력
$ git log
커밋 메시지의 첫번째 줄만 출력
$ git log --pretty=short
브랜치의 흐름을 그래프로 보여주며 로그 출력
git log --graph --all
$ git show 커밋해시값
-- 해시값이란 커밋의 고유한 id를 말하는데, 앞쪽 7자리까지만 주로 사용한다.
(위 이미지에서 'first' 커밋의 경우엔, '4f1dd31' 이 해시값이자 커밋id이다.)
git revert 명령어는 git reset과 다르게 돌아가고자 하는 과거 커밋과 현재 커밋 사이의 다른 커밋들을 제거하지 않고 원하는 커밋만 제거할 수 있는 명령어 입니다.
$ git revert HEAD
git reset 명령어는 돌아가고자 하는 커밋과 현재 커밋 사이의 모든 커밋이 제거되고, 해당 커밋들의 변경 사항들만 보존합니다.
$ git reset HEAD~n
워킹디렉토리와 스테이지, 혹은 워킹디렉토리와 커밋 간의 차이를 확인할 수 있는 명령어이다.
$ git diff
- a가 스테이지, b가 워킹디렉토리이다. 워킹디렉토리에서 +라인이 추가되어있는 상태
head가 가리키는, 즉 가장 최근 커밋과 비교한다
$ git diff head
- a가 커밋, b가 워킹디렉토리이다. 워킹디렉토리에서 +라인이 추가되어있는 상태
$ git clone 원격저장소URL
원격저장소 이름의 상위폴더를 생성하지 않고 현재 폴더로 내부 파일,폴더들만 클론하고 싶다면 . 를 붙여주면 된다.
$ git clone 원격저장소URL .
연결된 원격저장소의 목록을 출력한다.
$ git remote
연결된 원격저장소의 목록의 URL을 포함한 세부 정보를 출력한다.
$ git remote -v
$ git remote show 원격저장소별칭(origin)
연동하려면 add
옵션을 사용하는데, 원격저장소의 별칭으론 주로 origin 을 사용한다.
$ git remote add 원격저장소별칭(origin) 원격저장소URL
$ git remote rename 원격저장소현재별칭 새로운별칭
로컬 저장소는 여러개의 원격저장소와 연결할 수 있는데, rm
옵션을 통해 하나를 삭제할 수 있다.
$ git remote rm 원격저장소별칭(origin)
원격저장소로 로컬의 내용을 전송한다.
$ git push 원격저장소별칭(origin) 로컬_브랜치이름
내려받은 후 자동으로 현재 브랜치와 병합한다.
$ git pull
fetch 는 내려받은 후 임시 공간에 저장할 뿐 현재 브랜치와 자동 병합하지 않는다.
merge를 통해 병합을 해주어야함.
로컬에서의 현재 브랜치로 원격 브랜치를 내려받는다.
$ git fetch
$ git merge 원격저장소별칭(origin)/원격_브랜치이름
생성되어있는 모든 브랜치 목록을 출력한다.
$ git branch
생성되어있는 모든 브랜치의 해시값을 포함한 세부 사항을 출력한다
$ git branch -v
특정 브랜치의 현재 커밋 해시값을 출력한다
$ git rev-parse 브랜치이름
기존 브랜치의 HEAD와 같은 커밋 해시값을 갖고 생성된다.
$ git branch 브랜치이름
(브랜치이름) 브랜치로 이동한다
$ git checkout 브랜치이름
-b
옵션을 통해 브랜치를 생성함과 동시에 이동할 수 있다.
$ git checkout -b 브랜치이름
$ git checkout -
동직원리 상, 브랜치 이름은 커밋 해시값과 동일하게 볼 수 있으므로 이를 사용해 이동할 수 있다.
$ git checkout 커밋해시값
현재의 한 단계 전 커밋으로 이동한다
$ git checkout HEAD~1
현재의 다섯 단계 전 커밋으로 이동한다
$ git checkout HEAD~5
현재 브랜치가 부모커밋인 상태이고 (브랜치이름) 브랜치는 자식커밋이어야 한다.
즉, 병합되는 브랜치는 현재 브랜치에서 분기된 브랜치이다.
$ git merge 브랜치이름
- main 브랜치에서 feature 브랜치를 병합한 모습
(feature 브랜치는 main 브랜치에서 분기된 브랜치이다)
-d
옵션은 스테이지 상태가 깨끗할 때만 삭제를 허용한다
$ git branch -d 브랜치이름
-D
옵션은 수정 내역이 있어도 강제로 브랜치를 삭제할 수 있다
$ git branch -D 브랜치이름
원격저장소의 리모트 브랜치 목록을 출력한다
$ git branch -r
로컬의 브랜치와 원격저장소의 리모트브랜치 정보를 출력한다
$ git branch -a
현재 로컬 브랜치에 연결된 원격브랜치 정보를 출력한다
$ git branch -vv
-u
옵션은 --set-upstream
옵션의 약자로, 기존 로컬 브랜치를 특정 원격 브랜치로 추적하게 한다.
이를 업스트림 설정(트래킹)이라고 부른다.
원격저장소에 로컬 브랜치를 전송한다
$ git push -u 원격저장소별칭(origin) 로컬_브랜치이름
원격저장소에는 (새로운브랜치이름) 으로 로컬 브랜치를 전송한다
$ git push -u 원격저장소별칭(origin) 로컬_브랜치이름:원격_새로운브랜치이름
깃허브를 통해 원격 브랜치를 만든 상태라면, 로컬로 불러와야한다.
fetch 명령어이기에, 자동적으로 병합되지 않고 임시공간에 저장된다. 연결시켜주어야한다.
$ git fetch
새로운 업스트림 원격브랜치를 로컬에 생성한다(그러므로 추적된다). 2가지 명령어가 있다.
$ git checkout --track 원격저장소별칭(origin)/원격_브랜치이름
- 로컬에서 function 브랜치를 생성하고 리모트 브랜치 function에 업스트림 설정한 모습
원격브랜치와 같은 이름의 브랜치가 로컬에 생성된다.
$ git checkout -b 로컬_새로운브랜치이름 원격저장소별칭(origin)/원격_브랜치이름
- 로컬에서 aaa 브랜치를 생성하고 리모트 브랜치 aaa에 업스트림 설정한 모습
기존에 있던 로컬 브랜치를 원격 브랜치로 추적한다.
$ git branch -u 원격저장소별칭(origin)/원격_브랜치이름
- 로컬 브랜치 bug 는 아직 추적되는 원격브랜치가 없는 모습
- 로컬의 현재 브랜치인 bug 브랜치를 리모트 브랜치 bbb에 업스트림 설정한 모습
리모트 브랜치를 삭제하기 위해서 삭제 명령을 push한다
$ git push 원격저장소별칭(origin) --delete 원격_브랜치이름
- 원격브랜치는 삭제되었지만, 로컬브랜치는 유지되는 모습
브랜치를 변경하려면 워킹디렉토리는 깨끗한 상태로 정리되어 있어야한다.
현재 작업을 멈추고, 다른 브랜치에 있는 코드를 수정하기위해 이동하려면 스태시(임시저장) 기능을 사용할 수 있다. 스태시의 저장 영역은 스택 구조이다. 즉, FILO(First In Last Out) 구조이다.
워킹디렉토리에서 수정 작업 중 지저분한 상태일때, 스태시를 통해 깔끔해진 모습
스태시는 현재 작업들을 임시 스택 영역에 저장한다
$ git stash
save
옵션을 통해 메시지를 추가할 수 있다
$ git stash save "WIP: 메시지"
$ git stash list
- stash@{목록번호}는 최신에 저장한 스태시가 항상 0으로 업데이트된다.
방금 전의 스태시와 현재 워킹디렉토리 간의 차이를 출력한다
$ git stash show
-p
옵션을 추가하여 특정 스태시와 워킹디렉토리 간의 상세 차이점을 알 수 있다
$ git stash show -p stash@{목록번호}
현재 브랜치로 스태시를 불러온다.
pop
옵션은 스택에서 내용을 삭제시킨다. (오려두기&붙여넣기)
$ git stash pop
- 스택에 내용이 삭제되어 남아있는 것이 없는 모습
현재 브랜치로 스태시를 불러온다.
apply
옵션은 스택에서 내용을 삭제시키지 않고 남겨둔다. (복사하기&붙여넣기)
$ git stash apply stash@{목록번호}
- 스택에 내용이 삭제되지 않고 남아있는 모습
스택의 pop과 동일하게 가장 마지막에 저장된 내용을 불러온다.
스태시를 복원할때 워킹디렉토리의 상태는 깨끗해야한다. 그렇지 않으면 충돌이 발생할 확률이 높아지는데, 같은 파일에서 동일한 부분을 변경했다면 즉시 충돌이 발생해 직접 해결해야한다.
스태시 충돌이 예상된다면 스태시용 브랜치를 하나 생성해서 작업하는것이 추천됨.
새로운 브랜치를 생성하고 이동한 뒤, 스태시를 적용 시킨다
$ git stash branch 새로운브랜치이름
drop
옵션을 통해 '가장 최근 스태시'를 스태시 목록에서 삭제한다.
$ git stash drop
- 가장 최근 스태시인 stash@{0} ('third' 메시지)가 삭제된 모습