[기초 공부] Git 정리

woodyn·2021년 5월 25일
0

기초 공부

목록 보기
10/16
post-thumbnail

Git

소프트웨어의 변경 사항을 관리하기 위한 분산형 버전 관리 시스템

  • 중앙 집중형인 SVN(Apache Subversion)에 비해 사용이 복잡하지만, 프로젝트 규모가 클 수록 장점을 가짐
    • 로컬 저장소에서 커밋을 관리하여, 더 유연한 협업이 가능함
    • 분산형이므로 중앙 저장소에 문제가 생겨도 복구가 쉬움

Git 파일 상태

  • Modified: 파일이 수정되었으나 Staging 되지 않은 상태
  • Staged: 커밋될 예정으로 Staging Area에 존재하는 중간 상태 (git add)
  • Committed: 커밋된 이후, 변경 사항이 없는 상태 (git commit)

Git 명령어

Basic Snapshotting

  • git add: 파일을 Staging Area에 추가
  • git status: 추적되고 있는 파일들의 상태 확인
  • git commit: Staged 파일들을 담은 커밋 스냅샷 추가
    • --amend: 가장 최근의 커밋을 새 커밋으로 덮어 씀
  • git reset: 이전 커밋 상태로 돌아감
    • --hard: 현재의 변경 사항을 버림
    • --soft: 현재의 변경 사항을 Staged 상태로 남김
  • git rm: 커밋되어 있는 파일 삭제 (실제로도 삭제됨)
    • --cached: Staging Area에서만 제거하고, 실제로는 삭제하지 않음
  • git mv: 간편히 파일 이동
  • git checkout -- <file> or git restore <file>: 파일 변경 사항 복원
  • git clean: 현재의 변경 사항을 모두 버림
    • -x: .gitignore에 등록된 파일마저 삭제함

Branching and Merging

  • git branch: 브랜치 목록 조회
    • -u: Upstream 브랜치 설정 (원격 저장소의 브랜치를 트래킹)
    • -D: 브랜치 삭제
  • git checkout <branch> or git switch <branch>: 브랜치 스위칭
  • git merge: 현재 브랜치에서 해당 브랜치와 병합 (충돌 시 병합 커밋으로 해결)
  • git log: 현재 브랜치의 커밋 히스토리 조회
  • git stash: 현재의 변경 사항을 임시 저장소에 보관
    • -m: 메시지와 함께 보관
    • list: 스태시된 항목 조회
    • apply: 스태시 항목의 변경 사항을 적용
    • pop: apply와 함께 스태시 항목 제거
    • drop: 스태시 항목 제거

Sharing and Updating Projects

  • git fetch: 현재 브랜치의 Upstream 브랜치 히스토리를 최신 버전으로 갱신
    • --all: 원격 저장소의 모든 Upstream 브랜치를 최신으로 가져옴
  • git pull: git fetch로 최신 커밋들을 가져오고, git merge로 현재 브랜치와 병합
    • -r: merge 대신 rebase 명령을 수행함
  • git push: 원격 저장소의 브랜치로 커밋 업로드
    • --delete <branch>: 원격 저장소의 특정 브랜치 삭제
  • git remote: 원격 저장소 목록 조회
    • add <name> <url>: 원격 저장소 등록

Patching

  • git cherry-pick: 다른 브랜치의 커밋 하나를 복사하여 HEAD 위에 추가
  • git rebase <other>: 다른 브랜치의 여러 커밋들을 복사하여 HEAD 위에 추가
    • <branch>: 해당 브랜치로 스위칭하여 수행
    • -i <range>: 히스토리를 대화식으로 자유롭게 수정
      • reword: 커밋 메시지 수정
      • edit: 해당 커밋을 HEAD로 멈춤 (작업 후 --continue)
      • squash: 변경 내용을 직전 커밋으로 통합 (커밋 메시지는 병합)
      • fixup: 변경 내용을 직전 커밋으로 통합 (커밋 메시지 버림)
      • drop: 커밋 제거
  • git revert: 현재 브랜치의 한 커밋을 제거하고, 해당 변경 사항을 커밋

.gitignore

Git이 트래킹하지 않는 파일들을 명시하기 위한 파일

  • 이미 트래킹된 파일은 영향을 받지 않음 (git rm --cached로 제거해야 함)
  • .gitignore 내용을 변경한 경우, git rm --cached -r . ; git add . 명령으로 트래킹 목록을 갱신함

GitHub

Git 저장소 호스팅을 제공하는 웹 사이트

Pull Requests

프로젝트 관리자에게 Merge를 요청하는 Contribution 기능

  • Auto-merge: 일정 수의 코드 리뷰와 유효성 검증을 마치면, 자동으로 해당 branch에 병합하는 기능
    • Merge: PR 브랜치의 커밋들과 함께 병합 커밋을 추가함
      • 장점: PR 병합 기록을 쉽게 확인할 수 있음
      • 단점: 병합이 잦아질 수록 히스토리의 가독성이 떨어짐
      • 사용 목적: 드물게 병합되는 develop 브랜치에 활용
    • Squash and merge: PR 커밋들을 하나의 커밋으로 통합하여 추가함
      • 장점: 자잘한 변경 사항들을 하나로 합칠 수 있음
      • 단점: PR 병합 기록이 커밋으로 남지 않음
      • 사용 목적: feature 브랜치에서 자잘한 작업을 합칠 때 활용
    • Rebase and merge: PR 커밋들을 복사하여 rebase 방식으로 추가함
      • 장점: 히스토리에 병합이 없었던 것처럼 깔끔하게 만듦
      • 단점: PR 병합 기록이 커밋으로 남지 않음
      • 사용 목적: feature 브랜치에서 활용
profile
🦈

0개의 댓글