git 명령어

2023. 11. 28. 11:00 형상관리/Git

용어

  • Committed: 데이터가 로컬 데이터베이스에 안전하게 저장됐다는 것을 의미
  • Modified: 수정한 데이터를 아직 로컬 데이터베이스에 커밋하지 않은 것을 의미
  • Staged: 수정한 파일을 곧 커밋한 것이라고 표시한 상태를 의미

설정

설정 정보는 3가지 형태로 관리가 되며, 우선순위는 local > global > system 순입니다.

  • system: /etc/gitconfig 파일에 저장되며 git config --system 명령으로 수정 가능
  • global: ~/.gitconfig, ~/.config/git/config 파일에 저장되며 git config --global 명령으로 수정 가능
  • local: 프로젝트 .git/config 파일에 저장되며 git config --local 명령으로 수정 가능

Git은 Commit을 할때 사용자 정보를 추가 합니다. 다음 명령으로 사용자 정보를 변경할 수 있습니다.

  • git config --global user.name "{이름}"
  • git config --global user.email "{이메일}"

상태

  • git status: 파일 상태 확인.- --ignored 옵션을 이용해서 제외된 파일 확인 가능
  • git status -s: 파일 상태를 간략히 표시

로그

  • git log: commit 로그를 확인 합니다.
  • git log --oneline --graph: commit 정보를 1줄로 표현하고, 커밋 그래프를 보여줍니다.

비교

  • git diff: Committed 와 Modified 상태를 비교 합니다.
  • git diff --cached: Committed와 Staged 상태를 비교 합니다.

병합

  • git merge {Branch Name}
    • feat-forward merge: 서로 다른 브랜치중 1개가 다른 브랜치 base와 같을때 발생하며 별다른 커밋이 생성되지 않고 단지 브랜치 위치만 변경한다.
    • 3-way merge: 서로 다른 브랜치가 공통된 커밋(base)가 있으며 공통된 커밋으로 부터 각자 커밋을 생성하였을 때 발생한다. 커밋 후에는 새로운 브랜치가 생성이 되고 자동 병합을 진행한다. 자동 병합이 실패한 변경에 내용에는 충돌(conflict)이 발생을 하며, 수동으로 수정을 한 후에 다시 커밋을 해야 한다.

cherry-pick

다른 브랜치 커밋 이력중 특정 커밋의 변경 내용을 가져와 현재 커밋에 추가 합니다.

  • git cherry-pick {commit ... }

stash

진행하고 있는 업무를 commit 없이 잠시 스택에 임시적으로 저장하여 다른 브랜치에서 작업을 할 수 있도록 합니다.

  • git stash: 작업 내용은 스택에 넣어 임시 저장 한다
  • git stash list: stash 목록을 확인한다
  • git stash apply {stash 이름}: 스택에 있는 작업을 가져와 적용한다. 
  • git stash drop {stash 이름}: 스택에 저장되어 있는 작업 내역을 삭제 합니다.

Rebase

두 브랜치를 합치는 방법으로 이름에서 알 수 있듯이 두 브랜치의 공통 커밋(base)부터 작업 브랜치 까지 변경 내용을 기록하여 대상 브랜치에 동일한 순서대로 적용하는 방법 입니다.

  • git rebase {branch name}
  • git rebase -i {branch name}

Bisect

버그를 검색하는 방법으로 이진 탐색으로 오류가 있는 커밋을 찾습니다.

  • git bisect start: 이진 탐색을 시작 합니다.
  • git bisect bad: 이동한 커밋에 버그가 있을 경우 사용하는 명령입니다. 이후 찾을 커밋이 없을 경우 .. is first bad commit 메시지를 노출한다.
  • git bisect good: 이동한 커밋에 버그가 없을 경우 사용하는 명령입니다.
  • git bisect reset: 이진 탐색을 종료하고 start 명령을 사용한 커밋으로 이동합니다.

Blame

특정 파일에 줄단위로 수정자 정보를 노출 합니다.

  • git blame