알아두면 유용한 명령들

  • git log
    • 현재 브랜치에서 지금까지 발생한 커밋을 최신의 것이 위에 놓이도록 순서대로 보여준다.
    • 마지막으로 언제 어떤 작업을 했었는지, 커밋 메시지의 작성 convention이 어떻게 되는지 등을 확인할 수 있다.
    • Git Bash(Windows)에서는 q를 입력하여 탈출할 수 있다.
    • 꽤 자주 사용하는 명령이다.
  • git log --graph
    • 그래프 형식으로 브랜치의 흐름을 좀 더 자세하게 볼 때 유용하다.
  • git log --all --decorate --oneline --graph
    • 그래프 형식으로 아주 예쁘게 브랜치의 흐름을 그려준다.
  • git diff
    • git add를 아직 하지 않은 상황에서 수정된 파일이 있다면, 마지막 커밋과 현재 로컬 작업 환경 사이의 변경사항을 확인할 수 있다.
    • 아무 변경사항이 없으면 아무 것도 출력되지 않는다.
    • 패치노트 작성(변경사항 정리) 시 유용하다.
  • git diff --staged
    • git add를 이미 한 상황에서, 마지막 커밋과 현재 Git이 추적하고 있는(add된) 파일들 사이의 변경사항을 확인할 수 있다.
  • git diff [비교할 이전 브랜치 이름 또는 커밋 번호] [비교할 이후 브랜치 이름 또는 커밋 번호]
    • 두 브랜치(혹은 커밋) 사이에 이루어진 변경사항을 확인할 수 있다.
    • 마이너스(-)가 붙은 줄은 이전 커밋(앞의 인자)에 있는 내용이고, 플러스(+)가 붙은 줄은 이후 커밋(뒤의 인자)에 있는 내용이다.
    • 커밋 번호를 입력할 때에는 27a1e120c15aab3ae7d415941d86a2d2a6a0d815처럼 전부를 입력해도 되지만, 앞의 7자리인 27a1e12만 입력해도 대부분의 경우 잘 동작한다.
      • 꼭 7자리일 필요는 없다. 더 짧게 27a1처럼 입력해도 다른 커밋과 중복되지 않으면(구분 가능하면) 잘 동작한다.
  • git rm [삭제할 파일 경로]
    • 특정 파일을 로컬 작업 환경 및 로컬 레포지토리에서 삭제할 수 있다.
      • 파일이 아닌 폴더를 삭제할 때에는 git rm -r [삭제할 폴더 경로]를 입력한다. 이때 해당 폴더 안의 하위 폴더 및 파일들도 함께 삭제된다.
    • 위험한 명령이므로 신중하게 사용해야 한다.
  • git clone [원격 레포지토리의 SSH 또는 HTTPS 주소 붙여넣기]
    • 다른 사람의 public 원격 레포지토리에서 코드 전체를 내려받을 때 사용한다.
    • git clone 명령은 다음 명령들을 모두 입력한 것과 거의 비슷한 동작을 하는 명령이다.
      • git init
      • git remote add origin [레포지토리 SSH 주소]
      • git fetch origin
      • git pull origin main
      • git branch --set-upstream-to=origin/main main (원격 브랜치 main를 자동으로 추적하도록 하는 명령)
      • 추가로 원격 레포지토리에 있는 모든 브랜치를 자동으로 추적하도록 해준다.
    • git clone에 익숙해지면 처음 레포지토리를 가져올 때 위의 귀찮은 명령들(init, remote add, fetch, pull 등)을 전부 입력하지 않아도 된다.
    • git clone 관련 공식 문서한글 문서를 참조하면 좋다.
  • git remote -v
    • 로컬 레포지토리가 어떤 원격 레포지토리와 연결되어 있는지 확인할 수 있다.
  • git remote show origin
    • 어떤 원격 브랜치가 추적되고 있는지, git pullgit push가 로컬과 원격 사이에 어떻게 연결되어 있는지 자세히 확인할 수 있다.
  • git merge [머지할 브랜치 이름]
    • 현재 브랜치에 반영되지 않은, 머지할 브랜치의 커밋들을 현재 브랜치에 병합한다.
    • 머지 방식에 따라 "fast-forward", "recursive" 등의 전략이 존재한다.
      • fast-forward: 현재 브랜치에는 새로운 변경사항이 없고 머지할 브랜치가 현재 브랜치보다 앞서나간(새 변경사항이 추가된) 상황에서 Git이 머지하는 전략.
      • recursive: 현재 브랜치의 특정 과거 커밋이 두 브랜치의 공통 조상이지만, 현재 브랜치와 머지할 브랜치가 해당 커밋 이후에 서로 다르게 변경된 경우
        • 두 브랜치에서 건드린 부분(파일)이 서로 다르면 문제 없이 머지된다.
        • 두 브랜치에서 건드린 부분 중 공통된 부분이 있으면 머지 컨플릭트가 난다.
    • 자세한 내용은 여기를 참조하면 좋다.
  • git rebase [리베이스할 브랜치 이름]
    • git merge와 유사하지만 조금 다른 명령
    • 심화 과정이므로 본 문서에서는 자세히 설명하지 않는다.
    • 자세한 내용은 git rebase 관련 문서들을 검색해보면 좋다.