Git 전반적으로 알아보기
in Development on Git
1. 설정과 초기화
- 전역 사용자명/이메일 구성하기
git config --global user.name "Your name" git config --global user.email "Your email address"
- 장소별 사용자명/이메일 구성하기 (해당 저장소 디렉터리로 이동후)
git config user.name "Your name" git config user.email "Your email address"
- 전역 설정 정보 조회
git config --global --list
- 저장소별 설정 정보 조회
git config --list
- Git의 출력결과 색상 활성화하기
git config --global color.ui auto git config --global color.branch auto git config --global color.status auto
- 새로운 저장소 초기화하기
git init
- 저장소 복제하기
git clone <저장소 url>
- 새로운 원격 저장소 추가하기
git remote add <원격 저장소> <저장소 url>
2. 기본적인 사용법
- 새로운 파일을 추가하거나 존재하는 파일 스테이징하고 커밋하기
git add <파일> git commit -m "<메시지>"
- add 명령에서 Git 대화 모드를 사용하여 파일 추가하기
git add -i
- 마지막 커밋 고치기
git commit -m "<메시지>" --amend
- 이전 커밋을 수정하고 커밋 메시지를 재사용하기
git commit -c HEAD --amend
3. 브랜치
- 지역 브랜치 목록 보기
git branch
- 원격 브랜치 목록 보기
git branch -r
- 지역과 원격을 포함한 모든 브랜치 목록 보기
git branch -a
- 현재 브랜치에서 새로운 브랜치 생성하기
git branch <새로운 브랜치>
- 다른 브랜치 체크아웃하기
git checkout <브랜치>
- 현재 브랜치에서 새로운 브랜치 생성하고 체크아웃하기
git checkout -b <새로운 브랜치>
- 다른 시작 지점에서 브랜치 생성하기
git branch <새로운 브랜치> <브랜치를 생성할 위치>
- 브랜치를 옮기거나 브랜치명 변경하기
// <새로운 브랜치>가 존재하지 않을 경우 브랜치명 변경됨 git checkout -m <기존 브랜치> <새로운 브랜치> // 무조건 덮어쓰기 git checkout -M <기존 브랜치> <새로운 브랜치>
- 다른 브랜치를 현재 브랜치로 합치기
git merge <브랜치>
- 커밋하지 않고 합치기
git merge --no-commit <브랜치>
- 선택하여 합치기
git cherry-pick <커밋명>
- 커밋하지 않고 선택하여 합치기
git cherry-pick -n <커밋명>
- 삭제할 브랜치가 현재 브랜치에 합쳐졌을 경우에만 브랜치 삭제
git branch -d <삭제할 브랜치>
- 삭제할 브랜치가 현재 브랜치에 합쳐지지 않았어도 브랜치 삭제
git branch -D <삭제할 브랜치>
4. Git 이력
- 모든 이력 보기
git log
- 변경 사항을 보여주는 패치와 함께 로그 표시하기
git log -p
- 1개의 항목만 보이도록 로그 개수 제한하기
git log -1
- 20개의 항목과 패치만 보이도록 로그 제한하기
git log -20 -p
- 1개월 동안의 커밋 로그 보기
git log --since="1month"
- 이틀 전까지의 커밋 로그 보기
git log --before="2days"
- HEAD보다 세 개 이전의 커밋 로그 보기
git log -1 HEAD~10 git log -1 HEAD^^^ git log -1 HEAD~1^^ git log -1 HEAD~~^ git log -1 HEAD~2^
- 두 지점 사이의 커밋 로그 보기
git log <시작 지점>…<끝 지점>
- 각 항목의 로그 이력 한 줄씩 보기
git log --pretty=oneline
- 각 항목마다 영향 받은 줄의 통계 보기
git log --stat
- 커밋할 시점의 파일 상태 보기
git log --name-status
- 현재 작업 트리와 인덱스의 차이점 보기
git diff
- 작업 트리와 특정 위치 간의 차이점 보기
// 시작 지점은 커밋명 or 브랜치명 or 태그명이다. git diff <시작 지점>
- 저장소의 두 지점 사이의 차이점 보기
git diff <시작 지점> <끝 지점>
- 차이점의 통계 보기
git diff --stat <시작 지점> <끝 지점>
- 파일의 커밋 정보 줄 단위로 보기
git blame <파일>
5. 원격 저장소
- 저장소 복제하기
git clone <저장소>
- 마지막 200개의 커밋만 포함하여 저장소 복제하기
git clone --depth 200 <저장소>
- 새로운 원격 저장소 추가하기
git remote add <원격 저장소> <저장소 url>
- 원격 브랜치에서 지역 브랜치 생성하기
git branch <새로운 브랜치> <원격 브랜치>
- 원격 태그에서 지역 브랜치 생성하기
git branch <새로운 브랜치> <원격 태그>
- origin 저장소에서 합치지 않고 지역 브랜치로 변경 사항 가져오기
git fetch
- 원격 저장소에서 합치지 않고 지역 브랜치로 변경 사항 가져오기
git fetch <원격 저장소>
- 원격 저장소에서 변경 사항을 가져와 현재 브랜치에 합치기
git pull
- 지역 브랜치를 동일한 이름의 원격 브랜치에 푸싱하기
git push <원격 저장소> <지역 브랜치>
- 원격 저장소를 제거하고 관련된 브랜치도 제거하기
git remote rm <원격 저장소>
6. 작업 내역 변경하기
- reset : git 되돌리기 이력삭제 (옵션없을경우 기본 mixed) (push이전)
git reset <옵션> <돌아가고싶은 커밋>
- 돌아가려는 이력이후의 모든 내용을 지움
git reset --hard <돌아가고싶은 커밋>
- 돌아가려 했던 이력으로 되돌아 갔지만, 이후의 내용이 지워지지 않고, 해당 내용은 스테이지에 반영
git reset --soft <돌아가고싶은 커밋>
- 돌아가려 했던 이력으로 되돌아 갔지만, 이후의 내용이 지워지지 않고, 인덱스 초기화
git reset --mixed <돌아가고싶은 커밋>
- revert : 상태 되돌리기 (push이후)
git revert <되돌릴 커밋>
- rebase (https://dogfeet.github.io/articles/2012/git-merge-rebase.html)
git rebase <브랜치> // rebase 계속진행 git rebase --continue // rebase 강제스킵 git rebase --skip // rebase 작업을 중단 git rebase --abort
- rebase -i (https://jupiny.com/2018/05/07/git-rebase-i-option/)
git rebase -i [수정을 시작할 커밋의 이전 커밋]
- cherry-pick 다른 브랜치에 있는 특정 commit만 반영할때 사용
// git flow, 즉 feature/BTS-### 같은 브랜치를 따서 merge 하는 방식으로 운영하는 경우, 굳이 cherry-pick을 이용할 필요까지는 없음 single master branch 위에서 작업하는 방식으로 진행하는 경우에 유용함 git cherry-pick <가져올 커밋> git cherry-pick -n <가져올 커밋1> git cherry-pick -n <가져올 커밋2> git cherry-pick -n <가져올 커밋3> git commit -m "<메시지>"
7. 그 외
- 최초 저장소에서 pull 할때 클리어 하지 않은 프로젝트와의 충돌
git pull origin master --allow-unrelated-histories
- push 강제 되돌리기
git push --force git push origin <되돌릴 브랜치> --force
- 다른브랜치에서 특정 파일만 체크아웃하기(merge시 충돌날때)
git checkout <브랜치> -- <파일경로>
- Modified 초기화하기
// conflict 중인 파일이 있을경우엔 git reset HEAD <파일경로> git checkout -- <파일경로>