33기 웹파트 미미나에서 설명한 내용을 글로 정리했습니다.
미미나 때 길어질까봐 설명하지 못한 부분과 읽어보면 좋을 만한 참고 자료가 포함되어 있습니다 🙂
피드백은 언제나 환영입니다! 🙌🏻
- 버전 관리란?
파일 변화를 기록했다가 나중에 특정 시점의 버전을 다시 꺼내올 수 있는 시스템
데이터를 파일 시스템 스냅샷의 연속으로 취급한다.
스냅샷(snapshot)
- In computer systems, a snapshot is the state of a system at a particular point in time. (Wikipedia)
- A snapshot, as the name implies, is a point-in-time copy of the filesystem as it existed at the moment of the snapshot. (https://csguide.cs.princeton.edu/storage/snapshots)
→ 즉 특정 시점의 컴퓨터 파일 시스템 상태를 복사한 것을 의미한다.
파일에 변경 사항이 없으면 성능을 위해 새로 파일을 저장하지 않는다.
데이터를 저장하기 전에 항상 체크섬을 구해 데이터를 관리한다.
체크섬(checksum)
- a digit representing the sum of the correct digits in a piece of stored or transmitted digital data, against which later comparisons can be made to detect errors in the data. (Oxford Languages)
→ CS 개념이라 여기서는 체크섬이란 저장되거나 전달 받은 데이터에 에러가 있는지 확인하기 위해 사용하는 숫자라는 정도만 알아두자!
해시를 이용해 40자 길이의 16진수 문자열로 체크섬을 구하는데, Git은 이 해시로 파일을 식별하기 때문에 Git을 쓰다 보면 종종 볼 수 있다.
- 해시 예: 24b9da6552252987aa493b52f8696cd6d3b00373
Git에서는 일반적으로 데이터베이스에 데이터를 추가하기만 한다. 즉 이미 올라간 데이터를 삭제하기 어렵다. 물론 Git도 커밋하지 않으면 변경사항을 잃어버릴 수 있다. 하지만 커밋하고 나면 데이터를 잃어버리기 어렵다.
Git에서 이미 실행한 것을 되돌리는 방법을 포함하고 있는 링크 => 되돌리기
- 워킹 트리에서 파일 수정
- Staging Area에 파일을 Stage 해서 커밋할 스냅샷 만들기
- Staging Area에 있는 파일들을 커밋해서 Git 디렉토리에 영구적인 스냅샷으로 저장
git 저장소 생성하기 - 현재 폴더에 .git 파일 생성됨
git init
github 주소와 연결
git remote add origin [github 주소]
깃허브에 이미 레포가 있다면? => 저장소 복제 및 다운로드
git clone [https: ~~~~ ]
브랜치 생성
git branch [브랜치명]
해당 브랜치로 이동
git checkout [브랜치명]
브랜치를 생성하고 해당 브랜치로 바로 이동
git branch -b [브랜치명]
원하는 브랜치로 이동했는지 확인 - 현재 생성된 브랜치들과 지금 있는 브랜치 위치 표시
git branch
모든 브랜치 확인
git branch -a
파일 및 폴더 add
git add .
: 현재 directory 전체 추가, dotfiles(파일명이 .
으로 시작하는 애들) 제외
git add *
: 현재 directory 전체 추가
dotfiles까지 추가하므로 .gitignore
에 있는 파일들 처리가 필요하며 이외에도 여러 문제가 있을 수 있다고 한다.
참고 : git add .과 *의 차이
git add *
활용 예시
- git add *.txt
: 모든 txt 파일 add
- git add project/app/*/
커밋 생성
git commit -m "commit message"
원하는 브랜치로 push하여 원격 서버에 저장
git push origin [브랜치명]
원격 저장소의 변경 내용을 현재 디렉토리로 가져오기
pull vs fetch&merge
pull
은 최신 커밋을 받아온 다음 local과 자동 병합 진행
fetch
는 최신 커밋을 받아온 후 이름 없는 임시 브랜치('FETCH_HEAD'라는 이름으로 체크아웃 가능)로 내려받기만 하고 병합은 하지 않는다. 즉 병합을 하기 위해서는 fetch
후에 merge
가 필요하다.
(그래서 보통 fetch는 merge 전 변경사항을 확인하는 용으로 많이 씁니다)
→ 따라서 fetch
후 merge
가 더 안전하므로 권장하는 방법!
원격 저장소의 변경 내용을 현재 디렉토리로 가져오기
git pull [커밋 가져올 브랜치]
git fetch [커밋 가져올 브랜치]
현재 브랜치에 다른 브랜치 수정사항 병합
git merge [다른 브랜치 이름]
한 브랜치에서 다른 브랜치로 합치는 방법
rebase
: base를 재설정한다.
(페이지 하단에 추가 자료 링크 있어요!)
merge
변경 내용을 merge 하기 전에 바뀐 내용 비교
git diff [브랜치 이름] [다른 브랜치 이름]
(커밋 내역이나 staged 파일들, 변경 사항 있는지 여부 등 보여줌)
현재 상태 확인
git status
(git add, commit 여부 등을 파악할 수 있으며 어떤 수정사항들이 staged 됐는지 알 수 있다)
전체 로그 확인
git log
브랜치 삭제
git branch -d [브랜치 이름]
현재 상태 임시 저장
git stash
임시 저장 목록 확인
git stash list
가장 최근 stash 가져오기
git stash apply
git stash apply [stash 이름]
가장 최근 stash 삭제
git stash drop
모든 stash 삭제
git stash clear
다른 브랜치 커밋만 가져올 때
git cherry-pick
Git Book
(오역이 종종 있어 원문을 기준으로 보는 것을 추천합니다..!)
Git 브랜치의 종류 및 사용법 (5가지)
웹 개발 기초 - Git이란?
주로 사용하는 GitHub 명령어 모음
원격 저장소와 로컬 저장소
rebase 관련 자료
git rebase란?
Git Book-Rebasing(꼭 영문 버전도 확인하기!)
git rebase 옵션 설명