출처 - 코딩애플 git 강의
https://codingapple.com/course/git-and-github/
2일 전 코드로 돌아가려면?
Git은 버전관리 소프트웨어다
작업한 코드를 기록, 보관 가능
코딩하다 실수하면 과거상태로 돌아갈수 있고
과거 작업 내용 열람가능 등 안정적인 작업관리 가능
처음 작업 폴더를 만들고 vscode에서 터미널을 열어
git init
을 입력하면 이제 git이 작업폴더를 감시한다. 이제 이 폴더에서 git을 사용할 수 있다.
index.js라는 파일을 만들어서 코드를 썼음.
이 파일을 기록하려고 한다
git add index.js
이렇게 git add하고
여러개 파일을 할때는
git add index.js index2.js
작업 폴더에 있는 모든 파일을 스테이징(고르려면)
git add .
git commit -m '수정햇음'
이렇게 기록한다.
커밋메시지는 꼭 기록한다.
1분마다 계속 하는게 아니고 간단한 기능을 하나 구현했다 하면 커밋한다.
이렇게 두개로 나눠놓은 이유. 굳이 기록할 필요가 없는 파일도 있기 때문(이미지 등)
작업폴더에서 staging area로 보내는 행위를 스테이징한다고 한다 ( commit할 파일을 골랐다는 뜻)
git status
현재 작업폴더의 git 상태를 보여준다
어떤 파일들이 스테이징됐는지, 어떤 파일들이 수정이 됐는지 등을 보여준다
git log --all --oneline
기록을 보여준다.
git log --all --oneline --graph
그래프로 시각화해줌
지금까지 기록한 커밋한 내역을 쭈욱 볼 수 있다.
왼쪽 바에 git 모양 아이콘 누르면 다음과 같이 보인다.
Changes는 변경된 파일을 나타냄.
파일 이름 옆에 + 버튼 누르면 Stage Change로 스테이징 가능.
위에 커밋메시지와 커밋을 할수도 있다.
파일 이름을 눌러보면 바뀐 점이 보인다.
터미널에서 현재 상태와 이전 상태 코드를 비교할 수 있다.
git difftool
git difftool 커밋아이디
커밋 아이디는 노란색 부분.
특정 커밋과 비교가능.
git difftool 커밋아이디1 커밋아이디2
커밋 두개 비교가능.
그러나 요샌 git difftool을 터미널에서 쓰기보단 vscode 익스텐션에 git Graph같은걸로 더 편하게 볼 수 있다.
훨씬 편하게 볼 수 있음.
브랜치 = 프로젝트의 복사본
통째로 들고 신기능 이리저리 넣어보다 터지면 곤란하기 때문에
복사본을 만들어놓고 거기서 작당을 한 다음, 잘되면 원본에다 합친다.
브랜치를 새로 파면 기존의 브랜치와는 별개가 된다.
새 브랜치에서 새로운 파일을 만들어도, 기존 브랜치로 스위치해보면 새 파일이 보이지 않음.
이렇게 따로 따로 가다가
합쳐야될 순간이 온다. 어차피 하나로 만들어서 배포할거니까.
그때 이렇게 merge한다.
git branch coupon
coupon이라는 브랜치를 새로 만든다
git switch 브랜치명
먼저 합쳐서 남게될 브랜치로 switch 이동.
→ git switch main
(main 브랜치로 이동. 합친 후 main이 남게된다는 뜻)
그 다음 합쳐질 브랜치 명을
git merge 브랜치명
이렇게 쓴다.
→ git merge coupon
(coupon 브랜치를 main 브랜치에다가 붙였다)
똑같은 부분에서 브랜치마다 서로 내용이 다르면 충돌이 일어남.
이때는 둘 중 하나를 선택해야 한다. vscode 기능을 이용해서
Accept Current Change 기존 코드를 택할지
Accept Incoming Change 새로 합친 브랜치의 코드를 택할지를
둘 중 하나를 선택한 후, git add 하고 commit하면 완료!
git log 해보면 머지 된 후 이렇게 표시된다.
HEAD는 현재 상태를 뜻한다. 현재가 main 브랜치라는 뜻.
참고로 합쳐도 merge된 브랜치(위에서는 coupon 브랜치)는 삭제되는 것이 아니라 살아있다.
git branch -d coupon
이렇게 입력하면 coupon 브랜치 삭제가 된다.(merge완료된 브랜치 삭제)
git branch -D 브랜치명
merge 안 한 브랜치 삭제
가장 기본적인 방식
기존 브랜치(남게될 브랜치)에다가 합쳐질 브랜치(사라질 브랜치)를 붙임.
커밋 내역이 많으면 지저분하고 복잡함.
사용되는 경우
3way 방식과 차이는 그냥 신규 브랜치에다 이름을 기존 브랜치로 바꿔주는거임
기준이 되는 브랜치에 신규 커밋이 없으면 자동으로 fast-forward merge가 된다.
그게 싫다면 강제로 3way로 하게 할수도 있다
이렇게
git merge --no-ff 브랜치명
rebase → 브랜치의 시작점을 다른 commit으로 옮기는 행위
즉 rebase해서 신규 브랜치의 시작점을 옮긴 후
fast-forwad merge하는 것.
→ 강제 fast-forwad merge
단점은 충돌 많이 발생할 수 있음.
하는법
git switch 신규브랜치
git rebase main
git switch main
git merge 신규브랜치
squash and merge 하면 새 브랜치에 있던 커밋들을
떼와서 기존 브랜치에 붙여준다.
하나의 커밋에 뭉쳐서 만듬. 깔끔하다.
신규 브랜치에서 만들었던 commit들을 다 합쳐서 하나의 commit으로 생성해준다.
이렇게 하면 git log 하면 merge된 브랜치의 커밋들이 출력되지 않음. 더 깔끔.
git switch main
git merge --squash 브랜치명
git commit -m '메시지'
파일복구
commit 복구
과거로 돌아가기
코드를 쓰다 컨트롤z를 누르면 돌아가지만 컴터 껐다 켜면 안됨.
git restore 파일명
해당 파일의 최근 commit 상태로 되돌아간다
git restore --source 커밋아이디 파일명
이렇게 하면 특정 커밋아이디 시점에서의 파일명 상태로 돌아간다
커밋하고 보니 이상하네?
git은 이미 한 커밋을 삭제하거나 수정할수는 없음.
대신에 특정 커밋을 취소하는 새 커밋을 할수는 있음.
git revert 커밋아이디
이렇게 하면 해당 커밋에서 한 작업이 취소된 새 커밋이 생성된다
git revert HEAD
최신 commit 취소
git reset --hard 커밋아이디
특정 커밋아이디 시점으로 전부 되돌아간다
협업할땐 사용금지. 다른 사람들 다 꼬인다.
₩