Git
- 프로젝트의 버전 관리를 하기 위해 사용하기 프로그램
- 여러 개발자와의 협업
- git 기반의 저장소 서비스 > GitHub, GitLab
commit
working directory
staging area
- 특정 버전으로 관리하고 싶은 파일을 모아두는 장소
repository
- 특정 시점의 staging area의 모습으로 커밋으로 남기면, 그 커밋들이 저장되는 영역
working directory -git add .-> staging area -commit-> repository
명령어
git init
- git으로 버전 관리를 할 수 있는 상태 변환
- .git 디렉토리 생성
- 버전관리를 위한 것들 알아서 관리
git config user.name “{user_name}”
git config user.email “{user_email}”
git log
- commit log / commit history 확인
- q 입력으로 탈출
git diff {commit_id} {commit_id}
git reset — hard HEAD@{number}
git reset —hard {commit_id}
- 해당 id의 커밋 모습으로 변경
- HEAD가 가리키는 커밋 모습으로 working directory 변경
- HEAD : 현재 내가 위치해있는 커밋을 가리키는 식별자
- hard 옵션 : working directory, staging area, repository 모두 해당 커밋 모습으로 변경 (위험)
- mixed 옵션 : staging area, repository만 해당 커밋 모습으로 변경. git add . -> 커밋
- soft 옵션 : repository 만 해당 커밋 모습으로 변경. 바로 커밋 가능
- mixed / soft -> 커밋 로그 수정. 즉, 제대로된 커밋만 남기기 위함

git status
git reflog
- reference log
- HEAD가 가리켰던 커밋 기록을 모두 보여주는 명령어
- 가장 최근 커밋 HEAD{0}
GitLab
외부 저장소 서비스 : GitHub, GitLab, Bitbucket, ...
명령어
git remote add origin {project_url}
- 내 컴퓨터에서 외부 저장소에 관한 작업 수행
- url이 가리키는 외부 서버의 프로젝트를 원격 저장소로 지정
- url 이름을 origin으로 지정
git push -u origin master
- 프로젝트 내용을 origin이 가리키는 원격 저장소의 프로젝트로 업로드
- -u : --set-upstream 내 컴퓨터의 master 브랜치가 깃랩 서버의 master 브랜치를 HEAD로 지정
git clone {project_url}
- url이 가리키는 원격 저장소의 프로젝트를 디렉토리 형태로 가져오는 방법
git pull
- Gitlab 프로젝트의 새로운 커밋을 내 컴퓨터로 이동
- 원격 저장소의 최신 커밋 반영
Branch
- 특정 커밋을 가리키는 포인터
- 하나의 프로젝트에서 서로 다른 개발 흐름을 병렬적으로 가져가기 위해 사용
명령어
git branch {branch_name}
git checkout {branch_name}
git log --all --graph
- --all : HEAD가 가리키는 Branch 뿐만 아니라, 모든 Branch 확인
- --graph : Branch와 commit의 관계 그래프 형식으로 표현
git merge {branch_name}
- HEAD가 가리키는 Branch에 {branch_name}에서 했던 작업 병합
- Fast-Forward Merge : 새로운 커밋 생성이 아닌, 당겨져 오는 merge
2 가지의 merge 종류


- 다른 브랜치에서 같은 파일 수정 및 커밋 시 conflict 발생 -> 코드 수정 & commit 후 merge

Merge Request
- Merge Commit
- Commit History 모양에 상관없이 항상 Merge 허용
- 항상 새로운 Commit이 생성되며 Merge

- Merge Commit with Semi-linear History
- Merge Request 전송 시, Fast-forward Merge가 가능할 때만 Merge
- 항상 새로운 Commit이 생성되며 Merge
- rebase 수행

- Fast-forward
- 새로운 커밋 생성이 아닌, 당겨져 오는 merge
git remote add upstream {원본 project url}
- 원본 프로젝트를 updtream이란 이름으로 원격저장소 지정
git pull upstream develop
- 원본의 develop 브랜치의 최신 커밋 반영
git merge upstream/develop
- 원본의 develop 브랜치 최신 커밋 가져오기
git log --all --graph --oneline
git rebase {branch 이름}
- 헤당 branch의 최신 커밋으로 시작점 재설정