Git 정리1 : 기초

Kimhojin_Zeno·2023년 6월 5일
1

Git 정리

목록 보기
1/2

Git 정리1 : 기초

출처 - 코딩애플 git 강의
https://codingapple.com/course/git-and-github/

2일 전 코드로 돌아가려면?

  1. 매번 백업해두거나
  2. 버전관리 소프트웨어 쓰거나

Git은 버전관리 소프트웨어다

작업한 코드를 기록, 보관 가능

코딩하다 실수하면 과거상태로 돌아갈수 있고

과거 작업 내용 열람가능 등 안정적인 작업관리 가능

처음 작업 폴더를 만들고 vscode에서 터미널을 열어

git init

을 입력하면 이제 git이 작업폴더를 감시한다. 이제 이 폴더에서 git을 사용할 수 있다.

git add, commit

git add

index.js라는 파일을 만들어서 코드를 썼음.

이 파일을 기록하려고 한다

git add index.js

이렇게 git add하고

여러개 파일을 할때는

git add index.js index2.js

작업 폴더에 있는 모든 파일을 스테이징(고르려면)

git add .

git commit

git commit -m '수정햇음'

이렇게 기록한다.

커밋메시지는 꼭 기록한다.

1분마다 계속 하는게 아니고 간단한 기능을 하나 구현했다 하면 커밋한다.

이렇게 두개로 나눠놓은 이유. 굳이 기록할 필요가 없는 파일도 있기 때문(이미지 등)

  1. git add로 기록할 파일을 고르고
  2. git commit으로 기록하라고 명령함.

작업폴더에서 staging area로 보내는 행위를 스테이징한다고 한다 ( commit할 파일을 골랐다는 뜻)

git status

git status

현재 작업폴더의 git 상태를 보여준다

어떤 파일들이 스테이징됐는지, 어떤 파일들이 수정이 됐는지 등을 보여준다

git log

git log --all --oneline

기록을 보여준다.

git log --all --oneline --graph

그래프로 시각화해줌

지금까지 기록한 커밋한 내역을 쭈욱 볼 수 있다.

vscode 자체 git 기능이 있다

왼쪽 바에 git 모양 아이콘 누르면 다음과 같이 보인다.

Changes는 변경된 파일을 나타냄.

파일 이름 옆에 + 버튼 누르면 Stage Change로 스테이징 가능.

위에 커밋메시지와 커밋을 할수도 있다.

파일 이름을 눌러보면 바뀐 점이 보인다.

git difftool

터미널에서 현재 상태와 이전 상태 코드를 비교할 수 있다.

git difftool
git difftool 커밋아이디

커밋 아이디는 노란색 부분.

특정 커밋과 비교가능.

git difftool 커밋아이디1 커밋아이디2

커밋 두개 비교가능.

그러나 요샌 git difftool을 터미널에서 쓰기보단 vscode 익스텐션에 git Graph같은걸로 더 편하게 볼 수 있다.

훨씬 편하게 볼 수 있음.

git branch

브랜치 = 프로젝트의 복사본

통째로 들고 신기능 이리저리 넣어보다 터지면 곤란하기 때문에

복사본을 만들어놓고 거기서 작당을 한 다음, 잘되면 원본에다 합친다.

브랜치를 새로 파면 기존의 브랜치와는 별개가 된다.

새 브랜치에서 새로운 파일을 만들어도, 기존 브랜치로 스위치해보면 새 파일이 보이지 않음.

이렇게 따로 따로 가다가

합쳐야될 순간이 온다. 어차피 하나로 만들어서 배포할거니까.

그때 이렇게 merge한다.

새로운 브랜치 생성 git branch 브랜치명

git branch coupon

coupon이라는 브랜치를 새로 만든다

브랜치 이동 git switch 브랜치명

git switch 브랜치명

브랜치 합치기

먼저 합쳐서 남게될 브랜치로 switch 이동.

→ git switch main

(main 브랜치로 이동. 합친 후 main이 남게된다는 뜻)

그 다음 합쳐질 브랜치 명을

git merge 브랜치명

이렇게 쓴다.

→ git merge coupon

(coupon 브랜치를 main 브랜치에다가 붙였다)

merge conflict

똑같은 부분에서 브랜치마다 서로 내용이 다르면 충돌이 일어남.

이때는 둘 중 하나를 선택해야 한다. vscode 기능을 이용해서

Accept Current Change 기존 코드를 택할지

Accept Incoming Change 새로 합친 브랜치의 코드를 택할지를

둘 중 하나를 선택한 후, git add 하고 commit하면 완료!

git log 해보면 머지 된 후 이렇게 표시된다.

HEAD는 현재 상태를 뜻한다. 현재가 main 브랜치라는 뜻.

git branch -d

참고로 합쳐도 merge된 브랜치(위에서는 coupon 브랜치)는 삭제되는 것이 아니라 살아있다.

git branch -d coupon

이렇게 입력하면 coupon 브랜치 삭제가 된다.(merge완료된 브랜치 삭제)

git branch -D 브랜치명

merge 안 한 브랜치 삭제

merge 방식1 : 3-way merge

가장 기본적인 방식

기존 브랜치(남게될 브랜치)에다가 합쳐질 브랜치(사라질 브랜치)를 붙임.

커밋 내역이 많으면 지저분하고 복잡함.

merge 방식2 : fast-forwad merge

사용되는 경우

  1. 새로 판 브랜치에만 신규 commit이 있음
  2. 기존 브랜치에서는 신규 commit이 없음

3way 방식과 차이는 그냥 신규 브랜치에다 이름을 기존 브랜치로 바꿔주는거임

기준이 되는 브랜치에 신규 커밋이 없으면 자동으로 fast-forward merge가 된다.

그게 싫다면 강제로 3way로 하게 할수도 있다

이렇게

git merge --no-ff 브랜치명

merge 방식3 : rebase and merge

rebase → 브랜치의 시작점을 다른 commit으로 옮기는 행위

즉 rebase해서 신규 브랜치의 시작점을 옮긴 후

fast-forwad merge하는 것.

→ 강제 fast-forwad merge

단점은 충돌 많이 발생할 수 있음.

하는법

git switch 신규브랜치
git rebase main

git switch main
git merge 신규브랜치

merge 방식4 : squash and merge

squash and merge 하면 새 브랜치에 있던 커밋들을

떼와서 기존 브랜치에 붙여준다.

하나의 커밋에 뭉쳐서 만듬. 깔끔하다.

신규 브랜치에서 만들었던 commit들을 다 합쳐서 하나의 commit으로 생성해준다.

이렇게 하면 git log 하면 merge된 브랜치의 커밋들이 출력되지 않음. 더 깔끔.

git switch main
git merge --squash 브랜치명
git commit -m '메시지'

git 파일 복구

파일복구

commit 복구

과거로 돌아가기

파일 복구하는 법

코드를 쓰다 컨트롤z를 누르면 돌아가지만 컴터 껐다 켜면 안됨.

git restore 파일명

해당 파일의 최근 commit 상태로 되돌아간다

git restore --source 커밋아이디 파일명

이렇게 하면 특정 커밋아이디 시점에서의 파일명 상태로 돌아간다

commit 취소하는 법

커밋하고 보니 이상하네?

git은 이미 한 커밋을 삭제하거나 수정할수는 없음.

대신에 특정 커밋을 취소하는 새 커밋을 할수는 있음.

git revert 커밋아이디

이렇게 하면 해당 커밋에서 한 작업이 취소된 새 커밋이 생성된다

git revert HEAD

최신 commit 취소

과거로 모든걸 되돌리기

git reset --hard 커밋아이디

특정 커밋아이디 시점으로 전부 되돌아간다

협업할땐 사용금지. 다른 사람들 다 꼬인다.

profile
Developer

0개의 댓글