같이보기

git update-index —assume-unchanged <파일명>

  • 커밋무시

git update-index —no-assume-unchanged <파일명>

  • 커밋 무시 되돌리기

git fetch —all

  • 모든 브랜치 패치하기

git fetch —all —prune

  • 원격저장소 삭제된 브랜치 정보 정리

git rm -r —cached .

  • .gitignore 적용 안될때 캐시제거

git add <. | 파일명>

  • 변경사항 스테이징 (스테이징 해야만 커밋가능)
  • . 은 모두 선택

git restore <. | 파일명>

  • 변경사항 취소 (스테이징 된거 제외)`
  • . 은 모두 선택

옵션

  • --staged:
    • 스테이징 취소하기 (변경사항은 유지)

git pull

  • 원격 pull 하기
  • 만일 커밋 이후에 pull을 통해서 원격 브랜치 변경사항을 받아오면 merge 커밋이 생김
  • 커밋안한 변경사항 있는 상태에서 pull 할때 해당 변경사항과 충돌이 생기는 경우 pull 이 안되기에 stash에 저장하거나, 커밋하거나 버리거나 해서 변경사항 없는 상태로 만들어야 함

git pull <원격저장소> <브랜치>

  • 특정 브랜치 pull 하기

옵션

  • --ff-only
    • pull 할때 merge 안생기게 fast-forwarded 로 하게끔
  • --rebase
    • --ff-only 가 안먹히는 경우 rebase

git push

  • 커밋 push 하기

git push <원격저장소> <브랜치>

  • 특정 브랜치 push 하기

옵션

  • -f
    • 로컬 커밋으로 강제 푸쉬 진행하기
    • reset, rebase 진행 시 사용

git status

  • git 상태 보기
  • pull 할꺼, push 할꺼 체크 가능
  • 변경 사항 체크가능
    • 빨강: 스테이징 안된것
    • 초록: 스테이징 된것
  • Unmerged paths:
    • 해결해야하는 병합 파일 목록

git diff <옵션 | null> <비교대상 | null>

  • 변경 사항 보기 (기본은 스테이징 안한것만)
  • 새로 만든 파일인 경우 반드시 스테이징 해야만 출력된다

git difftool <옵션 | null> <비교대상 | null>

  • 이건 아예 vim 같은 CLI 텍스트 에디터로 비교해줌
  • 사용볍은 diff와 같음

기본옵션

  • --staged:
    • 스테이징 항목 변경사항보기
    • 그냥 하면 스테이징 안된것만

비교대상

git diff HEAD

  • 스테이징 포함하여 모든 현재 변경사항 출력

git diff <브랜치A> <브랜치B>

  • 두 브랜치 간 비교

git diff <커밋A> <커밋B>

  • 두 커밋 간 비교

git diff <파일명>

  • 특정 파일에 변경사항 확인

git merge —abort

  • 병합 해드 취소

git reset <리셋타입 | null> <돌아갈 주소>

  • 커밋 리셋
  • 리셋이지만 앞 작업으로 가는 것도 가능하다
  • push 하려면 push -f로 강제 푸쉬해야 함
    • 누군가 reset 되기 전까지의 커밋까지 정보를 가지고 있는 경우 해당 사람도 똑같이 reset 진행 해야함

옵션

리셋타입

  • --soft | --hard:
    • reset 타입 지정

돌아갈 주소

  • 커밋 값:
    • git log 에서 확인
  • 작업로그 값:
    • git reflog 에서 확인
  • 브랜치명:
    • 해당 브랜치 까지 리셋 (원격도 가능 원격저장소/브랜치명)
    • 원격 브랜치로 리셋 할 경우 pull 받지 않고 로컬 브랜치를 강제로 원격 브랜치에 위치시킴
      • 로컬 브랜치가 꼬여 pull이 안되는 경우 사용하기 좋다.
      • 대신에 모든 로컬 커밋은 취소된다.
  • HEAD~:
    • 이전 커밋 취소

git log

  • 커밋로그 보기 (빠져 나올때 “q”)`

git log —all —oneline —graph

  • 그래프 형태로 보기

git reflog <브랜치>

  • 브랜치 작업로그 보기 (빠져 나올때 “q”)

git rebase <브랜치>

  • rebase 하기
  • push 하려면 push -f로 강제 푸쉬해야 함
    • 누군가 rebase 되기 전까지의 커밋을 보유하고 있는 경우
      git reset --hard 원격저장소/브랜치 해서 원격 브랜치로 reset 해야함

옵션

  • --continue:
    • rebase 작업 계속하기
  • --skip
    • HEAD(Rebase 타겟)가 가지고 있는 사항으로 유지 시킨다
    • 충돌해결 안해도 상관없는경우 해당부분 스킵
  • --abort:
    • rebase 되돌리기
  • -s ours
    • 충돌나는 모든 커밋을 타겟 브랜치 커밋으로 교체
  • -X ours
    • 위와 반대
    • 충돌나는 모든 커밋을 기존 브랜치 커밋으로 교체

git branch <브랜치>

  • 브랜치 생성

git branch —all

  • 모든 브랜치 보기
  • 원격 브랜치는 remotes 빼고 보면 됨

git branch -D <브랜치>

  • 로컬 브랜치 삭제

git push <원격 저장소> <브랜치>

  • 원격 브랜치 생성
  • 원격 저장소는 보통 origin

git push <원격 저장소> -d <브랜치>

  • 원격 브랜치 삭제

git branch -m <현재이름> <바꿀이름>

  • 브랜치명 변경
  • 이름 변경이후 원격 브랜치 push 는 이전 브랜치 삭제 변경된 브랜치 push

git switch <브랜치>

  • 브랜치 간 전환

옵션

  • -c:
    • 브랜치 생성 & 전환
  • -f:
    • 변경사항(커밋안한) 존재할 시 버리고 전환
  • -m:
    • 변경사항과(커밋안한) 병합하기

브랜치

  • -:
    • 최신 커밋으로 돌아가기

git checkout <커밋값 | 브랜치>

  • 브랜치, 커밋 전환
  • switch 로는 커밋간 전환이 안되므로 체크아웃으로

git checkout <커밋값 | 브랜치> — .

  • 브랜치 전환하지 않고 해당 브랜치의 변경사항을 가져오기

옵션

  • -f:
    • 변경사항(커밋안한) 존재할 시 버리고 전환
  • -m:
    • 변경사항과(커밋안한) 병합하기

git stash <작업 | null> <옵션 | null>

git 임시 저장소, 스텍구조로 되어있음

  • stash에 변경사항 저장하기
  • -m 설정 안하면 0, 1, 2 순으로 저장

기본옵션

  • -m:
    • 저장할 이름
  • -S:
    • 스테이지에 있는것만

작업

git stash list

  • stash 목록보기

git stash drop <이름 | null>

  • stash 제거하기
  • 이름 안정하면 가장 최근꺼

git stash apply <index | null>

  • stash 적용하기 (이름은 쓸 수 없음 list 명령에서 앞에 인덱스 확인)
  • 이름 없으면 가장 최근꺼

git stash pop

  • 가장최근꺼 적용하고 삭제
  • 스텍구조라 drop 으로 하면 인덱스가 뒤섞임

git submodule <작업>

git 에서 심볼릭 링크처럼 다른 리포지토리를 엮어 쓰는방법

git submodule add <리포지토리url> <적용경로>

  • <적용경로> 에 리포지토리 추가

git submodule init

  • submodule 이 적용된 리포지토리를 clone 받고나서 바로 이걸 해줘야됨
  • 그래야 update 가능

git submodule update —remote —recursive

  • submodule 브랜치 정보 업데이트
  • submodule 쪽 브랜치에 새로운 커밋이 올라오면 해당 커밋에 해드 sha 값으로 업뎃

참고

로컬, 원격 브랜치 선택

  • 로컬:
    • 그냥 브랜치명 master
  • 원격
    • 원격 저장소명/브랜치명 origin/master

모든 것을 의미하는 문자

  • .