Developer / Student of USW

Git 배우기

시작하기 앞서

commit
branch
checkout
cherry-pick
reset
revert
rebase
merge

학습 명령어

  • git branch 브랜치치 브랜치 생성
  • git checkout 브랜치치; git commit 브랜치치로 이동 후 커밋
  • git merge 브랜치치 브랜치치를 하나로 통합
  • git rebase 브랜치치 현재 브랜치를 브랜치치로 통합

    리베이스는 기본적으로 커밋들을 모아서 복사한 뒤, 다른 곳에 떨궈 놓는 것입니다. 조금 어렵게 느껴질 수 있지만, 리베이스를 하면 커밋들의 흐름을 보기 좋게 한 줄로 만들 수 있다는 장점이 있습니다. 리베이스를 쓰면 저장소의 커밋 로그와 이력이 한결 깨끗해집니다.

    • merge와 rebase의 차이?

      merge: 두 브랜치를 합치는 것 (history가 남음) rebase: 한 브랜치의 커밋을 다른 브랜치 위로 옮기는 것 (history가 일직선이 됨)

  • ^ 한번에 한 커밋 위로 움직임
  • ^2 여러 부모 커밋이 있을 경우, 해당 번째에 커밋된 부모로 움직임
  • ~<num> 한번에 여러 커밋 위로 움직임 git checkout HEAD~^2~2 처럼 한 번에 사용 가능
  • git cherry-pick 브랜치치 브랜치치치 HEAD 아래에 브랜치치, 브랜치치치 붙여넣기
  • git commit --amend 커밋 내용 정정
  • git tag v1 브랜치치 v1태그를 브랜치치에 달기
  • git describe <ref>
    • 브랜치치가 상대적으로 어디에 위치해있는지 묘사
    • 커밋 방향감각 찾는데 도움을 줌
    • <ref>에는 commit을 의미하는 그 어떤 것이든 가능
    • 출력 형태:
      <tag>-<numCommits>-g<hash>
      
      - <tag> 가장 가까운 부모 태그
      - <numCommits> 그 태그가 몇 커밋 멀리있는지
      - <hash> 묘사하고있는 커밋의 해시
      
  • git bisect 문제가 되는 커밋을 찾는 명령어
  • git clone 원격 저장소(github)에서 복사본으로 가져오기
  • git fetch “ 원격 저장소와 현재 상태를 동기화 “
    • 원격 저장소에는 있지만 로컬에는 없는 커밋들을 다운로드 받음
    • 원격 브랜치가 가리키는곳을 업데이트함 (ex. o/main)
    • 단, git fetch는 다운로드만 할 뿐 실제 로컬 구성을 변경하진 않음 -> 이걸 하려면 git pull
  • git pull 원격 저장소의 변경을 fetch하고 그이후에 merge하는 작업의 과정을 한 번에 수행
  • git push 원격 저장소에 내 로컬 상태 올리기
  • git pull --rebase fetch와 rebase를 한 번에 수행
  • git branch -u 브랜치치 브랜치치치 브랜치에 원격 추적 설정; 브랜치치치가 브랜치치 추적
  • git push origin main
    • 내 저장소에 있는 “main”라는 이름의 브랜치로 가서 모든 커밋들을 수집
    • 그다음 “origin”의 “main”브랜치로 가서 이 브랜치에 부족한 커밋들을 채워 넣음
  • git push origin <source>:<destination>
    • colon refspec(콜론 참조스펙)
    • 참조스펙: “git이 알아낼 수 있는 위치” (브랜치 ‘foo’ 또는 HEAD~1)
  • git push origin :브랜치치 원격 저장소의 브랜치치를 삭제함
  • git fetch origin :브랜치치 로컬에 새 브랜치치를 만듦