git 초기화. git으로 버전관리를 할 경로에서 사용합니다. .git 폴더가 생성 되며 아래와 같은 구조입니다.
HEAD
config
description
/branches
/hooks
/objects
/refs
현재 git 프로젝트에서 파일들의 상태를 보여줍니다. git의 영역과 상태에 대한 자세한 설명은 아래의 두 문서를 참고해 주세요.
https://dololak.tistory.com/303
https://dololak.tistory.com/304
파일의 변경 내용을 스테이징 영역(staging area)에 추가하기 위해 사용하는 명령어입니다. 스테이징 영역으로 추가된 변경 이력만 commit할 수 있습니다.
git add -A
git add .
git add README.md
파일을 지우거나 스테이지에서 해제할 때 사용합니다.
git rm README.md
git rm --cached README.md
워킹 트리(Working tree)의 변경된 파일을 복원해 주는 역할을 합니다.
git restore [파일명]
git restore --staged [파일명]
추적되지 않은 상태(untracked)의 파일을 삭제합니다. 삭제가 되면 복구할 수 없으니 stash 를 고려해보는 것도 좋습니다.
git clean -f
git clean -f -d
git clean -f -d -x
git clean -n
변경된 내용을 저장합니다.
git commit -m 'First Commit'
git commit -a
git commit --amend
commit 목록을 볼 수 있습니다. 굉장히 많은 옵션이 있으니 git log --help 명령어로 자신에게 맞는 조합을 활용하시기 바랍니다.
git log --graph
git log --all
git log --oneline
commit 의 상세 정보를 확인합니다.
git show
git show [commit 해시값]
git show [branch 명]
commit 을 취소할 수 있습니다.
commit을 취소하고 해당 파일들은 스테이징 영역에 보존
git reset --soft HEAD^
commit을 취소하고 해당 파일들은 Unstaging
git reset --mixed HEAD^
git reset HEAD^
git reset HEAD^
git push -f origin 브랜치명
git pull
원격 저장소(remote repository)를 관리하는 명령어 입니다.
설정된 원격 저장소 보기
git remote -v
test 라는 이름으로 원격 저장소 추가하기
git remote add test https://github.com/test/test
원격 저장소(remote repository)에 코드 변경분을 업로드합니다.
기본 사용법
git push [저장소명] [branch]
최초 1회 저장소, branch 지정. 이 후, 생략 가능
git push -u [저장소명] [branch]
로컬에서 생성한 branch를 push
git push --set-upstream [저장소명] [branch]
branch에 관련한 명령어 입니다.
로컬 branch 목록 확인
git branch
원격 저장소를 포함한 모든 branch 목록 확인
git branch -a
test 라는 branch 생성하기
git branch test
test 로컬 branch를 origin이라는 원격 저장소의 test branch에 연결
git branch --set-upstream-to=origin/test test
test branch 삭제
git branch -d test
test branch 강제 삭제
git branch -D test
branch를 변경하는 명령어 입니다. checkout 에서 복원하는 기능을 제거했다고 합니다.
test branch로 변경하기
git switch test
test2 라는 branch를 새로 생성하고 test2 branch로 변경하기
git switch -c test2
branch를 변경하고 워킹 트리(Working tree)에서 변경점을 복원하는 명령어 입니다. switch, restore 명령어를 사용하는 것을 추천합니다.
test branch로 변경하기
git checkout test
test2 라는 branch를 새로 생성하고 test2 branch로 변경하기
git checkout -b test2
Unstaged 상태의 파일을 원래대로 되돌림
git checkout -- [파일명]
Unstaged 상태의 현재 경로의 모든 파일을 원래대로 되돌림
git checkout -- .
원격 저장소(remote repository)의 데이터를 가져옵니다. pull 로 병합하기 전에 어떤 변경점이 있나 살펴볼 때 사용하기 좋습니다.
origin 이라는 원격 저장소의 데이터를 가져옴
git fetch origin
모든 원격 저장소의 데이터를 가져옴
git fetch --all
원격 저장소에서 삭제된 branch를 로컬에서도 삭제
git fetch --prune
원격 저장소(remote repository)의 데이터를 가져온 후 로컬 branch에 병합합니다.
git fetch --all && git pull 과 같습니다
git pull --all
현재 작업중인 변경점을 임시 저장하거나 불러올 수 있습니다. 현재와 다른 branch로 가서 작업을 하기전에 사용하면 유용합니다.
git stash save testStash
git stash list
testStash 라는 stash를 불러와 적용하기
git stash apply testStash
testStash 라는 stash를 불러와 적용하는데, Staged 상태까지 적용하기
git stash apply testStash --index
가장 최근의 stash를 가져와 적용하고 스택에서 삭제하기
git stash pop
가장 최근의 stash 제거하기
git stash drop
testStash라는 stash를 제거하기
git stash drop testStash
특정 파일의 수정 이력을 확인할 수 있습니다. 각 라인별로 누가, 언제 마지막으로 수정 했는지 알 수 있습니다.
test.txt 파일의 수정 이력을 확인
git blame test.txt
test.txt 파일의 5부터 10번 라인까지만 확인
git blame -L 5,10 test.txt
파일명이 변경 되었다면, 변경전의 파일명과 함께 확인
git blame -C newTest.txt
공백 변경을 무시
git blame -w test.txt
소스를 비교하여 볼 수 있습니다.
마지막으로 커밋된 소스와 현재 Unstaged 상태의 변경점과 비교
git diff
마지막으로 커밋된 소스와 현재 Staging 된 변경점과 비교
git diff --staged
커밋간 비교
git diff [커밋해시1]..[커밋해시2]
branch간 비교
git diff [branch1] [branch2]
지정한 커밋으로 되돌려 커밋합니다. 되돌린 이력이 남기때문에 충돌이 발생할 위험이 적으며 협업 상황에서 사용하는 것을 추천합니다.
특정 커밋으로 되돌리고 커밋
git revert [커밋해시]
특정 태그로 되돌리고 커밋
git revert [태그명]
특정 커밋으로 되돌리지만 커밋은 안한채로 Staging 상태
git revert [커밋해시] -n
병합한 커밋으로 되돌릴 때 메인이 되는 커밋을 지정하여 되돌리기
git revert [커밋해시] -m 1
특정 커밋에 표기하는 기능입니다. 주로 릴리즈 시 이용합니다. 두 가지 종류가 있는데 Lightweight 태그와 Annotated 태그입니다. Lightweight 태그는 단순히 버전등의 이름을 남길 때 사용합니다. Annotated 태그는 만든 사람의 이름, 이메일, 날짜, 메시지까지 저장하며 GPG(GNU Privacy Guard)로 서명까지 가능합니다.
현재 HEAD에 v1.0.0이라는 Lightweight 태그 생성
git tag v1.0.0
현재 HEAD에 v1.0.0이라는 Annotated 태그 생성
git tag -a v1.0.0 -m 'message'
특정 커밋에 v1.0.0이라는 Lightweight 태그 생성
git tag v1.0.0 [커밋해시]
v1.0.0 태그를 원격 저장소에 푸시하기
git push origin v1.0.0
모든 로컬 태그를 원격 저장소에 푸시하기
git push origin --tags
로컬의 v1.0.0 삭제
git tag -d v1.0.0
원격 저장소의 v1.0.0 태그 삭제
git push -d origin v1.0.0
현재 브랜치를 특정 브랜치의 소스와 병합합니다. merge 하기 전엔 워킹 디렉토리를 stash 등으로 깔끔하게 정리하고 진행하는 것을 추천합니다.
master branch를 병합
git merge master
병합 충돌(Conflict) 발생 시 취소
git merge --abort
공백으로 인한 병합 충돌을 무시하고 병합
git merge -Xignore-all-space
저는 rebase를 쓰지 않지만, 알아두면 좋으니 간단하게 정리하겠습니다. merge처럼 branch를 합치는 기능을 하는데요. 작동 방식이 merge 와는 다릅니다. 자세한 설명과 개념은 아래 링크의 문서로 대신 하겠습니다.
https://git-scm.com/book/ko/v2/Git-브랜치-Rebase-하기
이런 경우에 사용하면 좋을 것 같습니다.
예) master 브랜치에서 feature 브랜치로 분기하여 커밋 후, master 브랜치의 새로운 커밋이 있을 때 feature 브랜치가 master 브랜치의 새로운 커밋을 병합해야 할 때, merge 커밋을 남기기 싫을 경우.
쉽게 말해서, 작업하는 branch를 병합할 branch에 병합 이력없이 변경 커밋만 남기고 싶을 때 사용하면 좋습니다.
모든 원격 저장소의 데이터를 가져옴(최신화)
git fetch --all
원격 저장소(origin)의 master 브랜치로 rebase
git rebase origin/master # git merge origin/master
와 결과는 같으나 병합 이력 커밋이 없다
중요한 점은 원격 저장소에 올라가 사용중인 커밋을 rebase 하는 것은 최대한 지양해야 한다는 것입니다.