Notepad
article thumbnail
Published 2023. 8. 27. 22:14
[정리] 핵심만 배우는 git dev/기타

핵심만 배우는 git

실시간 모니터링 시스템을 만들며 정복하는 MEVN 책을 읽은 내용 중 일부에 대해 정리한 내용입니다.

git이란?

  • 스냅샷 스트림 기반의 분산형 버전 관리 시스템
  • 여러 사람이 동시에 작업하는 프로젝트에서 코드의 변경 사항을 추적하고 관리하기에 매우 효과적
  • 빠르고 효율적
  • 오픈 소스
  • 다양한 운영 체제에서 사용 가능

git의 특징

git의 데이터 관리

  • 데이터를 파일시스템의 스냅샷의 연속으로 취급

git의 무결성

  • 데이터를 저장하기 전에 항상 체크섬을 구하고 그 체크섬으로 데이터를 관리
  • 체크섬은 git에서 사용하는 가장 기본적인 데이터 단위이자 기본 철학

git의 체크섬(checksum)

  • SHA-1 해시를 사용해 체크섬을 생성
    • SHA-1(Secure Hash Algorithm 1): 160비트(20바이트) 해시값을 만드는 암호화 해시 함수
    • d670460b4b4aece5915caf5c68d12f560a9fe3e4
  • 40자 길이의 16진수 문자열의 특징
  • 폴더나 파일을 이름으로 관리하는 것이 아닌 유니크한 아이디를 가지고 데이터 관리

git의 상태관리

  • 데이터를 3가지 상태로 두고 관리
    • Modified
      • 파일을 수정한 상태
    • Staged
      • 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태를 의미
      • 스테이지 공간에 올라간 상태
    • Commited
      • .git 디렉터리에 커밋한 상태

자주 사용하는 git 명령어

git init: 로컬 저장소를 생성

  • git init

git add: 변경된 파일을 스테이징 영역에 추가

  • git add file1 file2

git commit: 스테이징 영역에 있는 변경 사항을 커밋

  • git commit -m "커밋 메시지"

git push: 커밋한 변경 사항을 원격 저장소로 전송

  • git push origin master

git pull: 원격 저장소의 변경 사항을 로컬 저장소로 가져옴

  • git pull origin master

git branch: 브랜치를 생성

  • git branch new_branch

git checkout: 브랜치를 전환

  • git checkout new_branch

git merge: 두 개의 브랜치를 병합

  • git merge branch_name

git rebase: 브랜치를 재설정

  • git rebase branch_name

git status: 현재 작업 디렉터리의 상태를 보여주는 명령어

  • git status

git log: 커밋 히스토리를 조회

  • git log –-pretty=oneline

git diff: 변경 사항을 비교

  • git diff branch_name

git stash: 작업 중인 변경 사항을 임시로 저장

  • git stash

git reset: 변경 사항을 되돌림

  • git reset HEAD~1

Merge와 Rebase

Merge

  • 일반적으로 두 개의 브랜치가 독립적으로 작업한 후, 변경 사항을 통합할 때 사용
  • 두 개의 브랜치의 변경 사항이 병합되어 새로운 커밋이 생성

Rebase

  • 일반적으로 두 개의 브랜치가 동일한 작업을 수행하고 있지만, 다른 순서로 작업한 후, 변경 사항을 통합할 때 사용
  • 두 개의 브랜치의 변경 사항을 하나의 브랜치로 재귀적으로 병합하여 해당 브랜치의 이력을 변경

Merge vs. Rebase

  • 히스토리를 보는 관점 중에 하나는 작업한 내용의 기록으로 보는 것
  • 히스토리를 프로젝트가 어떻게 진행되었는지 이력으로도 볼 수 있음
  • git은 매우 강력한 도구이며, 기능이 많아서 히스토리를 잘 쌓을 수 있지만, 모든 팀과 모든 이가 처한 상황은 모두 다름

git 공식 문서에서의 일반적인 해답

  • 로컬 브랜치에서 작업할 때는 히스토리를 정리하기 위해서 Rebase 할 수도 있지만, 리모트 등 어딘가에 Push로 내보낸 커밋에 대해서는 절대 Rebase 하지 말아야 한다

참고

  • 실시간 모니터링 시스템을 만들며 정복하는 MEVN
profile

Notepad

@Apio

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!