[GIT]자주 사용하는 명령어

박민하·2022년 6월 12일
0

GIT

목록 보기
2/10
post-thumbnail

✅ 기본 사항

  • git init : 새로운 git 저장소 생성
  • code . : vscode를 실행
  • git branch -M main : master branch를 main 으로 이름 변경

✅ 계정 등록

  • git config --global user.email : 이메일 등록
  • git config --global user.name : 이름 등록

✅ 상태 확인

  • git status : git 상태 확인
  • git add : 파일 수정 이력 기록(commit 전 단계)
  • git diff : add되지 않은 이력과 add된 이력의 차이점 확인

✅ commit 이력 확인

✔ log

  • git log : commit 이력 확인. 해시코드 확인 가능.
  • git log --oneline --graph --decorate --all -<숫자>
    • git log 이후의 옵션들은 선택적으로 사용할 수 있다.
    • --oneline : commit 해시와 제목만 나타냄.
    • --graph : 브랜치 흐름을 그래프로 나타냄
    • --decorate : 간결하게 표시
    • --all : HEAD와 관계 없는 모든 브랜치 확인
    • -<숫자> : commit 이력을 최신 <숫자> 개수만 확인

✅ 파일/폴더 삭제

  • git rm <파일명> : 로컬&원격 저장소에서 git 파일 삭제
  • git rm --cached <파일명> : 원격 저장소에서만 파일 삭제
  • git rm -r --cached <폴더명> : 하위폴더 모두 삭제
  • git rm -r --cached . : git cache 삭제

✅ 상대참조(Relative Ref)

^<num>

  • git checkout <브랜치>^ :
    • <브랜치>를 기준으로 HEAD가 1개의 commit 위로 이동
  • git checkout <브랜치>^<num> :
    • <브랜치>를 기준으로 HEAD가 num번째 부모 commit으로 이동

~<num>

  • git checkout <브랜치> ~<num> :
    • <브랜치>를 기준으로 HEAD가 한번에 num만큼 commit 위로 이동
  • git checkout <브랜치>^<num>~<num2> :
    • <브랜치>를 기준으로 HEAD가 num번째 부모 commit으로 이동하고 num2만큼 위로 이동

✅ 브랜치 병합

✔ merge

  • git merge <브랜치> : <브랜치>를 현재 Checkout된 브랜치에 합친다.

✔ rebase

  • git rebase <브랜치> <옮길 브랜치> : commit의 순서를 바꿔준다. commit 흐름을 한 줄로 정리할 때 사용된다.
    • <옮길 브랜치><브랜치> 위로 이동
    • <옮길 브랜치>를 지정하지 않으면 현재 위치한 branch로 자동 선택된다.
    • <브랜치> 가 자식 브랜치라면 <브랜치>에 바로 옮겨진다.

✔ merge vs rebase

  • merge는 commit 시점 기준으로 병합(모든 branch의 commit이 섞이게 됨)
  • rebase는 branch 기준으로 병합.
    • commit 해시가 다르다
    • 그대로 옮겨지는게 아니라 새롭게 생성된다.
    • 그 때문에 conflicts가 발생 할 때, 가장 마지막 commit을 비교하는 방법으로 해결이 안된다.

✅ feature 브랜치 병합

feature 브랜치의 작업을 main 브랜치로 통합하는것과
원격저장소에서 push하고 pull하는 작업입니다

✅ 작업 되돌리기

✔ reset

  • 애초에 commit하지 않은 것처럼 예전 commit으로 브랜치를 옮긴다.
  • "히스토리를 고쳐쓴다"는 점 때문에 원격 repository에는 사용되지 않는다.
  • git reset HEAD^ : 가장 최근 commit 내역 삭제
  • git reset <커밋 해시> : commit으로 되돌리기
  • git reset --hard <커밋 해시> : commit으로 되돌리고, 그 이후의 모든 내용을 지운다.

✔ revert

  • 되돌리려고한 commit의 아래에 되돌린 내용이 새롭게 commit된다.
  • 이 되돌린 내용을 다른 사람들과 공유할 때 reset 대신 사용된다.
  • revert를 하면 다른 사람들에게도 push가 가능하다.
  • git revert <브랜치> : 현재 위치 위에 <브랜치>가 새롭게 추가된다.

✅ 작업 옮기기

✔ cherry-pick

  • 옮길 commit이 뭔지 알 때 사용한다.
  • 개별 커밋을 골라서 HEAD위에 복사본을 만들 수 있다.
  • git cherry-pick <커밋 해시1> <커밋 해시1> <...> : 현재 위치(HEAD) 아래에 <Commit1> <Commit2> <...>의 복사본을 만든다.

✔ rebase -i

  • 옮길 commit이 뭔지 모를 때 사용한다.
  • 커밋의 순서를 바꾸거나 일부만 골라내기 유용하다.
  • git rebase -i <브랜치> : 현재 위치부터 <브랜치>까지의 commit들을 골라서 복사본을 만든다.
    • 남길 commit, squash 등 세부 수정이 가능해진다.
    • pick한 commit 외에 squash(s)를 하면 작업 내역이 없어지는 게 아니라 보관이 된다.
  • git rebase -f <브랜치> <commit> : 브랜치로 checkout 한 후 commit으로 브랜치 이동한다.

✅ 디버깅

✔ bisect

  • 이진 탐색으로 결함을 유발하는 commit을 찾는다.
  • git bisect start : 탐색 시작
  • git bisect bad <커밋 해시> : 문제있는 commit 기록
  • git bisect good <커밋 해시> : 문제없는 commit 기록
  • git bisect reset : 탐색 종료

✅ 태그 추가 및 검색

✔ tag

  • git tag <태그명> <커밋 해시> : commit에 태그를 붙임
  • git tag : 태그 확인
  • git show <태그명> : 태그가 붙은 commit에 대한 정보를 나타냄
  • git tag -d <태그명> : 태그 삭제

✔ describe

  • 가장 가까운 tag에 비해 상대적으로 어디에 위치해있는지 알려준다.
  • 커밋 히스토리에서 앞 뒤로 여러 커밋을 이동하고 나서 커밋 트리에서 방향감각을 다시 찾는데 도움을 준다.
  • git describe <ref> : ref가 부모 tag와 얼마나 떨어져 있는지 나타냄(ref 값이 없으면 자동으로 HEAD가 위치한 곳을 사용)
    • 출력 값 ⇒ <tag>_<numCommits>_g<hash>
    • <tag> : 가장 가까운 부모 tag를 나타냄
    • <numCommits> : tag가 몇 commit 떨어져 있는지 나타냄
    • <hash> : commit의 해시값

✅ 원격 저장소 ↔ 로컬 저장소

✔ clone

  • git clone <github_URL> : github에 commit된 소스 다운로드
  • git clone -b [branch_name] [github_URL] : 특정 브랜치만 clone
  • git remote update git checkout -t origin/[브랜치명] : clone 시 main 브랜치 외에 다른 브랜치 clone

✔ remote

  • git remote -v : git에 등록된 원격 저장소 리스트를 확인
  • git remote add origin <github_주소> : 내 컴퓨터에 있는 로컬 저장소와 원격 저장소(github repository)를 연결

✔ fetch

  • 실제로 로컬 파일들이나 브랜치가 변경되지는 않는다.
  • 변경을 원하면 fetch 이후에 cherry-pick, rebase, merge origin main을 해야한다.
  • git fetch : 원격 저장소에만 있는 커밋들을 로컬 저장소로 다운로드

✔ pull

  • 원격 저장소에만 있는 커밋들을 로컬 저장소로 다운로드와 업데이트를 동시에 할 수 있다.
  • git pull <원격 저장소 명> <브랜치> : 원격저장소에서 fetch 후 merge(fetch + merge). 원격저장소와 로컬 저장소의 Commit 이력이 전부 유지된다.
    • git pull origin main
  • git pull --rebase : pull과 동시에 commit 이력이 정리된다. 다른 사람의 commit 기록이 삭제되니 주의 필요.

✔ push

  • git push origin <브랜치> : 원격 저장소에 업로드하고, 원격 저장소는 갱신됨

✅ 그 외

✔ commit

  • git commit : 파일 수정 이력 기록
  • git commit -m <커밋_메세지> : commit 생성
  • git commit --amend : commit 메세지 변경

✔ branch

  • git branch : branch 목록 확인
  • git branch <브랜치> : branch 생성
  • git checkout -b <브랜치> : branch 생성과 동시에 이동
  • git checkout <브랜치> : branch 이동
  • git branch -d <브랜치> : branch 삭제
profile
backend developer 🐌

0개의 댓글