-Git은 소프트웨어 개발 과정에서 생기는 변경사항을 시간에 따라 기록, 이전 버전과 비교하며 수정사항을 관리하는 분산 버전 관리 시스템
-Github는 Git의 히스토리(기록)을 온라인에 저장해주는 웹호스팅 서비스 시스템(클라우드)
-Git은 기본적으로 로컬 저장소를 지원하고, 협업에 필요한 원격 저장소는 Github, Gitlab 같은 서비스를 이용, 로컬 저장소가 있어 속도가 빠르고 자신의 로컬에 부담 없이 코드를 기록할 수 있으며, 원격 저장소에 문제가 생기면 로컬 저장소를 통해 복구도 가능
-프로젝트의 버전을 브랜치로 구분하고 자유롭게 움직일 수 있음
⇒ 소스 코드 관리 도구 중 Git을 사용하는 이유는 로컬 저장소를 이용한 빠른 퍼포먼스와 브랜치를 통한 효율적인 협업임
**현재 작업중인 디렉토리, 수정가능한 모든 파일이 포함된 영역**
- Index (Staging Area)
work-tree에 있는 수정된 파일 중 **commit할 파일들을 임시로 저장하는 공간**
- Repository (컨테이너)
**모든 커밋의 history를 snapshot 형태로 저장하는 공간**
- Local Repository: 작업 중인 컴퓨터에 저장되는 **변경 내역 저장 공간**_Git이 설치된 컴퓨터 저장 공간
- Remote Repository: **변경 내역이** 외부 서버에 저장되는 중앙 저장소_ Githib이 이에 해당함
git add {file name}
git add .
git commit -m "Commit Message"
git commit
git commit을 CLI에 입력면, vi 편집기를 사용한 편집모드에 들어가게 된다.
git log
과거 버전을 확인할 수 있다.
git branch
로컬에서 사용 중인 브랜치를 확인하는 명령어
git branch --remote
원격 레포지토리에서 사용 중인 브랜치를 확인하는 명령어
git branch {New Branch Name}
"New Branch Name"이라는 이름의 브랜치를 생성하는 명령어
git checkout {Branch Name}
git checkout -b {New Branch Name}
git remote --v
.git 파일이 있는 디렉터리가 어떤 원격 레포지토리에 연결되어있는지 확인하는 명령어
git push origin
origin 원격 레포지토리로 업로드
git pull
현재 작업 중인 브랜치에서 원격 브랜치의 버전이 더 높을 때, 변경사항을 원격에서 로컬로 가져오는 명령어
개발자가 "Branch A"에서 작업 중이고, "Branch B"의 변경사항을 병합한다고 가정
git merge {Branch B}
"Branch B"의 변경사항을 병합하는 명령어
merge 충돌 나면
충돌 부분 해결 후 수동으로 merge 커밋 만들어 푸시
git add .
git commit -m "resolve merge conflict"
git push origin {원격브랜치}
Pull Request는 git의 기능이 아니고, GitHub의 기능입니다.
내 브랜치에서 작업 마치고, 다른 브랜치에 merge하기 전 팀원에게 코드 리뷰 요청, 적절하면 병합
git fetch origin
git checkout joy/#{주차}
git pull origin joy/main //원격 joy/main에서 최신 상태를 가져와 로컬에 반영
git push origin joy/#{주차} //병합 후 작업 브랜치를 원격에 푸시
add - commit - pushgit add .
git commit -m "[week1/mission] TodoList (HTML, CSS, JS) 구현”
git push origin joy/#{주차}
깃허브에서 PR 날리기
코드리뷰 및 Approve
PR의 Files changed 부분에서 코드와 함께 코멘트를 남길 수 있다.
자신의 main 브랜치에 merge
모든 reviewer의 approve를 받고 main 브랜치에 각 주차의 브랜치를 병합. 이후 각 주차 브랜치는 삭제
git push -d {Remote Name} {Branch Name}
원격에 브랜치를 푸시가 되어있는 상황에서, 푸시를 제거하고 싶을 때 수행하는 명령어
pull과 fetch의 가장 큰 차이점은 원격의 사항들을 가져와서 로컬에 자동으로 적용한다는 점
git fetch는 원격 저장소에서 변경 사항을 로컬로 가져오지만, work-tree에 반영하지는 않음
반면git pull은 원격 저장소에서 변경된 정보를 가져와 work-tree에 적용함
즉 pull은 fetch + merge를 동시에 수행하는 것임
원격에 있는 변경사항을 로컬 Git에 적용하기 전 확인 가능 -> merge 충돌에서 안전함
git fetch
git diff ...{원격 브랜치}
: 현재 작업하던 브랜치에서 다른 브랜치로 전환하는데, 변경사항들을 임시저장하고 넘어가려고 할 때 사용
현재 적용된 commit이후로 변경된 모든 사항들이
stash 공간으로 이동된다.
git stash
git stash push -m "임시저장 타이틀"
git stash list
임시저장된 변경사항들의 리스트를 보여준다.
# stash@{항목번호} 안쓰면 마지막 저장 항목 처리
git stash apply stash@{항목번호} # 임시저장된 항목 중 하나를 선택하여 적용
git stash drop stash@{항목번호} # 선택 항목 삭제
git stash pop stash@{항목번호} # 선택 항목 적용, 삭제
치워둔 항목 처리
git stash branch {브랜치명}
새 브랜치를 생성해 pop - 충돌 예방
git stash clear
치워둔 모든 항목들 비우기
: 가장 최근의 커밋 메시지를 수정
git commit --amend
가장 최근 커밋 메시지를 수정하는 vi 모드로 진입한다.
git commit --amend --no-edit
커밋 메시지 수정 없이, 현재 stage한 항목을 이전 커밋에 넣는다.
git commit checkout {commit hash}
특정 커밋 버전으로 돌아간다.