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 -- <파일경로>
    





© 2019. by Jinho Baek

Powered by rowkaxl