2021 시선 - 겨울 방학 스터디

2. Git

green333 2021. 1. 22. 23:09
728x90
SMALL
  • Init : git init (untracked 상태)
  • Add : git add .(untracked 상태 -> staged 상태)
  • Commit : git commit -m "<MEMO>" (staged 상태 -> committed 상태) 

GitHub

 

 

 

  • 원격 레포지토리 등록 

: git remote add <NAME> <URL>

  git remote rename <NAME> <NEW>

  git remote rm <NAME>

 

  •  Clone 

: git clone <URL> <NAME>

 

  • Push

: git push <NAME> <BRANCH>

 

  • Pull

: git pull <NAME> <BRANCH>

 

 


-alias : 가명 설정하기

 

터미널 -> vi 편집기 사용 

 

 

$ vi ~/.zshrc 

 

a -> alias g="git" 입력 -> esc -> :wq -> return

 

 

git 명령어 단축 완료!

 

$ vi ~/.gitconfig

 

 

입력 후 아래와 같이 입력해주기

 

 

a 입력하고 수정, 수정후에는 esc -> :wq 입력해서 빠져나오기

 

alias 내용

 

 

 

 


 

-BRANCH

프로젝트를 진행하며 새로운 기능을 추가할때 그 기능이 전체 프로젝트와 호환되는지 알 수 없음.

그래서 프로젝트를 통째로 복사하고 새로운 기능을 추가하고 호환되는지 충분히 검증한 후 원래의 레포지토리에 새로운 기능을 옮김.

 

Git은 이러한 과정을 자동화 시켜주고 기록으로 남기고 최악의 경우 복원하는 기능까지 제공. 이것이 Git의 Branching 기능

평행세계를 만드는 것. 그리고원래의 세계에서 평행세계로 넘어가서 그 세계에서 마음껏 실험적인 행동을 자행하는 것.

그 평행세계가 Branch

 

Git은 최대한 Branch를 자주 만들고 master 브랜치로 병합하라고 권장함.

 

브랜치란?

브랜치란 포인터! 그 포인터는 커밋들을 포인팅하고 있음.

Git은 기본 브랜치로 master 브랜치를 가지고 있는데, 이 master 브랜치는 언제나 마지막 커밋을 포인팅하고 있음.

실제로 커밋을 할때마다 master 브랜치가 자동으로 마지막 커밋으로 포인팅을 변경해줌

 

 

브랜치 생성 : 브랜치를 생성하는 것은 포인터를 만드는 것!

디렉토리 만들고, git init, main.c 생성, 내용 수정

 

 

다음 명령어로 스테이징 후 커밋

git add, git commit 

 

 

 

$ git branch : 현재의 위치하는 브랜치를 보여줌

alias로 변경해줬으니, $ g b 와 동일

 

$ git branch <NAME> : <NAME> 이라는 이름의 브랜치를 만들어줌

alias로 변경해줬으니, $ g b <NAME> 과 동일

 

 

 

 

 

현재 상태

현재 커밋을 두개의 브랜치가 포인팅하고 있음

 

 

 

 

HEAD : 현재 상주하고 있는 브랜치를 가리키는 포인터 

 

이런 상태임

 

 

 

브랜치 이주

 

$ git checkout <NAME> = = $ g co <NAME> : <NAME> 브랜치로 이동한다

 

이제는 이 상태!

 

 

코드 수정하기! 

 

 

add, commit 하기

 

 

 

testing 브랜치는 마지막 커밋을 포인팅하기 위하여 위치가 변경되었고, master는 제자리

 

 

git checkout으로 브랜치 변경해주기

 

 

다음과 같이 HEAD 위치 변경됨

 

$ cat main.c로 내용 확인하기

 

 

 

브랜치 병합하기

$ git merge <NAME> : <NAME> 브랜치를 현재의 브랜치로 병합

 

 

 

 

master 브랜치가 testing 브랜치가 포인팅하고 있는 커밋을 포인팅하게 됨 ; Fast-forward 병합

 

 

master인데, testing main.c가 나옴

 

 

 

git log로 상태 확인하고, 커밋 번호로 커밋 취소해주기 (=reset)

 

 

 

 

 

 

 

 

 

Merge Confilct

 

testing -> master 브랜치로 돌아온 상황. master 브랜치에서 main.c 다음과 같이 고치기

 

 

 

 

 

 

 

 

both modified: 에 main.c가 포함되어 있음

 

 

 

 

 

main.c를 열어서 병합 충돌이 발생한 코드를 확인해줘야함

 

 

위와 같이 충돌 영역을 ======= 로 구분해줌. 

HEAD에서 변경된 부분은 <<<<<<< HEAD 에서부터 ======= 까지이고 

testing 브랜치에서 변경된 부분은 ======= 부터 >>>>>>> testing 까지

 

 

다음과 같이 고쳐주기

 

 

 

다시 커밋해주면 병합 완성!

 

 

 

 

$ git branch -d <NAME> : 병합이 완료된 브랜치 삭제

$ git branch -D <NAME> : 병합이 완료되지 않은 브랜치 삭제

 

 

브랜치 삭제해주기

LIST

'2021 시선 - 겨울 방학 스터디' 카테고리의 다른 글

6. user.github.io (github 페이지 만들기)  (0) 2021.01.29
5. Pull Request  (0) 2021.01.29
4. 마크다운  (0) 2021.01.26
3. 1월 22일 스터디 과제  (0) 2021.01.23
1. Git  (0) 2021.01.20