https://git-scm.com/book/ko/v2 https://backlogtool.com/git-guide/kr/ https://rogerdudler.github.io/git-guide/index.ko.html
저장소로 지정할 Directory로 이동 후 수행
#mkdir DIRECTORY #cd DIRECTORY git init
“3가지 상태”를 따른다.
1. 파일 수정 2. 저장소에 제출할 파일 추가 (= Index 추가) 3. 저장소에 제출
git add <FILE 이름>
git clean -nd | sed s/'^Would remove '// | xargs -I{} touch "{}.keep"
git commit #이후 commit message 작성 #특별한 경우가 아니면 vim이 열리는 데, i → 편집 → ESC → :wq → ENTER
git commit -a -m "COMMENT" #git commit -am "COMMENT" # -a : all # -m : message
git branch
git branch <Branch 이름>
git checkout <Branch 이름>
git checkout -b <Branch 이름>
merge | rebase |
---|---|
모든 이력 남음. (정확한 이력 저장 용도) | 이력이 단순해짐. (통합 이력 용도) |
※ 현재 Branch로 병합되기 때문에 반드시 현재 Branch가 어디인지 확인 필요!
git merge <Branch 이름> [<commit>] #<commit> ## --ff (default, fast-forward) : 병합 흔적 남지 않음. ## --no-ff (non-fast-forward) : 병합 흔적 남음.
조상 Brunch를 “master”,
병합하려는 Brunch를 “hotfix”라고 할 때,
병합하려는 시점에서
병합.
단, 병합 이후 “master 내용 = hotfix 내용”이므로 hotfix 삭제.
# 1.현재 Brunch가 master일 때, "hotfix" Burnch 생성 및 전환 git checkout -b hotfix # 2. 수정 vim FILE # 3. commit git commit -a -m "fixed bug" # 4. master에 hotfix 병합 git checkout master git merge hotfix # 5. hotfix의 의미가 없으므로 삭제 git branch -d hotfix
☞ 병합 흔적이 Commit graph에 남지 않는다.
조상 Brunch를 “master”,
병합하려는 Brunch를 “issues”라고 할 때,
Git은 공통조상을 자동으로 찾아 Merge하고, 현재 Commit(= Branch Pointer)이 Merge한 Commit을 가리키도록 한다.
Merge 수행시 Conflict가 발생하는 데, 충돌 해결을 참조.
☞ 병합 흔적이 Commit graph에 남는다.
충돌이 발생하면 (<Branch 이름>|MERGING)으로 표시됨.
git rebase <branch 이름> git rebase <option> #<option> ## --continue : Conflit 발생시 해결 후 계속 작업 진행. ## --skip : 강제 병합. ## --abort : Conflict 발생시 취소.
git rebase -i <revision> #<revision> ## 이어서 "~ 혹은 ^"를 붙이면 개수만큼 되돌림. #지정한 <revision>과 최근 Commit을 병합하여 새로운 Commit 생성.
# 단순 Tag List 조회 git tag -l # Tag 및 SHA-1 Checksum 값 조회 git show-ref --tags # 한 Tag의 변경 이력 조회 git show <Tag 이름>
Version 이름만 붙이기
git tag <Tag 이름> <Checksum 4자 이상> # 특정 <Checksum 4자 이상>을 생략하면 "현재 Branch의 최신 Commit"에 반영
Version, 작성자, Comment 붙이기
git tag -a <Tag 이름> <Checksum 4자 이상> # 이후 tag message 작성. # 특정 <Checksum 4자 이상>을 생략하면 "현재 Branch의 최신 Commit"에 반영
revert | reset |
---|---|
이전 Commit을 삭제하지 않고, 되돌리려는 Commit을 새 Commit으로 생성 | 이전 Commit을 삭제하고, 해당 시점의 Commit으로 변경 |
예) “ⓐ → ⓑ → ⓒ → ⓓ → ⓔ” Commit 상태에서 ⓔ에서 ⓒ를 되돌리는 작업을 할 때
revert | reset |
---|---|
ⓐ → ⓑ → ⓒ → ⓓ → ⓔ → ⓒ | ⓐ → ⓑ → ⓒ |
git revert <revision> #이후 Commit message 추가 # <revision> ## HEAD를 넣으면 가장 최근 Commit 기준 ## SHA-1 Checksum 값을 넣으면 해당 시점 기준 ### 이어서 "~ 혹은 ^"를 붙이면 개수만큼 되돌림. ### 예) git revert HEAD~~ : 최종 Commit 기준으로 2단계 이전 Commit을 추가
git reset <mode> <revision> # <mode> ## --hard : HEAD, Index, Working Directory (완전히 되돌림.) ## --mixed : HEAD, Index (default, Index 되돌림. 파일내용 변경X) ## --soft : HEAD (commit만 되돌림. 파일내용 변경 X) # <revision> ## HEAD를 넣으면 가장 최근 Commit 기준 ## SHA-1 Checksum 값을 넣으면 해당 시점 기준 ### 이어서 "~ 혹은 ^"를 붙이면 개수만큼 되돌림. ### 예) git reset --hard HEAD~~ : 최종 Commit 기준으로 2단계 이전 Commit을 완전히 되돌림
git reset <mode> ORIG_HEAD
git checkout <revision> -- <file 이름> # <revision> ## HEAD를 넣으면 가장 최근 Commit 기준 ## SHA-1 Checksum 값을 넣으면 해당 시점 기준 ### 이어서 "~ 혹은 ^"를 붙이면 개수만큼 되돌림. ### 예) git checkout HEAD~~ -- helloworld.java : 최종 Commit 기준으로 2단계 이전 Commit으로 완전히 되돌림 ## 생략하면 "git add <file 이름>" 명령 실행 시점으로 되돌림.
최종 Commit을 대체하는 새 Commit 생성.
즉, 마지막 Commit과 현재 Commit 하지 않은 상태를 병합하여 새 Commit을 만든다.
git commit --amend
git clean <option> [--dry-run] #<option> ## -f : 파일만 ## -fd : 파일 & 디렉토리 전부 #[--dry-run] : 모의 실행
git status
git log #--graph 사용하면 ASCII 코드로 흐름 보임. #-<정수> 입력하면 최근순으로 정수 개수만큼 보임.
git clone <원격 서버 주소> # URL 대신 로컬 저장소도 복제 가능!
// pull 대상 Directory 생성하고 git init git remote add -f origin URL git config core.sparseCheckout true echo "원하는 Directory 이름" > .git/info/sparse-checkout git pull origin master
git remote add <저장소 별칭> <원격 서버 주소> #<저장소 별칭>은 관례적으로 origin 사용.
git push <원격 저장소 별칭> <로컬 브랜치 이름> #<로컬 브랜치 이름>에 --all 이면 모든 로컬 브랜치 Push
fetch | pull | |
---|---|---|
세세한 변경내역을 알 수 있는가? | O | X (fetch + merge) |
☞ fetch 추천
git fetch
git pull
Gonsole 설치
Git Tools 설치
# Shell path (64x 기준)
"C:\Program Files\Git\bin\sh.exe" -login -i