[git & github] 개발 기초 스터디 0주차 - git
https://codingapple.com/course/git-and-github/
(무료) 매우쉽게 알려주는 git & github - 코딩애플 온라인 강좌
Next.js는 프론트엔드부터 서버까지 만들 수 있는 React기반 프레임워크입니다. 이것만 사용해도 풀스택 웹개발이 가능합니다. Next.js 사용시 서버사이드 렌더링이 쉽기 때문에 React, Vue만 사
codingapple.com
위의 무료 강의를 참고하여 git과 github에 대한 기초 지식을 쌓아나갈 것이다.
git add & git commit
Terminal (powershell) 열기
> git init -> 작업폴더에서 git 사용하기 (코드 추적 시작)
> git add 파일명(ex. app.txt)
> git commit -m '작성하고싶은 메시지'
staging area & repository
1. staging area는 commit을 하기 전에 commit할 파일들을 골라놓는 곳
- staging area에 파일을 넣는 행위를 staging이라고 함
- git add 명령어도 staging 할 수 있음
2. repository는 commit된 파일의 버전들을 모아놓는 곳
- repository의 실체를 구경하고 싶으면 작업폴더안에 숨겨져 있는 .git 폴더 열어보면됨
파일이 여러 개일 때
- 여러 파일을 스테이징하는 방법
> git add 파일1 파일2..
- 모든 파일을 스테이징하는 방법
> git add .
- 상태창 열기 (어떤 파일들을 스테이징 해놨는지 확인)
> git status
- 스테이징 파일 취소
> git restore --staged 파일명
- commit 내역 조회
> git log --all --oneline
> git log --all --oneline --graph (그래프 옵션)
VSCode git add & git commit 기능
git branch
새로운 기능을 추가했다면 git branch를 사용해보자.
branch는 프로젝트의 복사본을 만들어서 거기에 먼저 개발을 해볼 수 있는 기능이다.
- branch 생성하기
> git branch 브랜치이름
- branch 이동하기
> git switch 브랜치이름
git merge
branch에서 작성한 코드가 마음에 든다면? merge하자
1. main/master 브랜치로 다시 이동하기 > git switch main
2. git merge 브랜치명 입력하기 > git merge 브랜치명
※ merge시 주의사항 (CONFLICT)
master 브랜치와 새로 생성한 브랜치에서 같은 파일, 같은 줄을 수정했을 경우 merge conflict 발생
이 경우 에디터로 해당 파일을 열어보면 충돌사항이 적혀있음
-> 둘 중 어떤 코드를 적용할지 고르면 된다.
-> 결정 후에는 git add & git commit 다시 수행
다양한 git merge 방법 (3-way, fast-forward, squash, rebase)
1. 3-way merge
브랜치에 각각 신규 commit이 1회 이상 있는 경우
merge 명령을 내리면 두 브랜치의 코드를 합쳐서 새로운 commit을 자동으로 생성함.
=> merge의 기본 동장방식
2. fast-forward merge
새로운 브랜치에만 commit이 있고 기준이 되는 브랜치에는 신규 commit이 없는 경우.
이 경우 merge하게 되면 신규 브랜치가 main 브랜치로 바뀌게 된다.
이게 싫다면 > git merge --no-ff 브랜치명 해서 강제로 3-way merge도 가능하다.
branch 삭제
브랜치를 merge하고 나면 브랜치가 자동으로 삭제되지 않는다.
git branch -d 브랜치이름
git branch -D 브랜치이름
둘 중 하나를 사용하면 필요없는 브랜치를 삭제할 수 있다.
병합이 완료된 브랜치 삭제에는 -d 이것만 해도 되는데
병합하지 않은 브랜치 삭제에는 -D를 사용해야한다.
rebase and merge
rebase란 브랜치의 시작점을 다른 commit으로 옮겨주는 행위이다.
1. rebase를 이용해서 신규브랜치의 시작점을 main 브랜치의 최근 commit으로 옮긴 다음
2. fast-forward merge를 한다.
-> 쉽게 말해 강제 fast-forward merge이다.
rebase를 사용하는 이유?
1. 3-way merge 말고 fast-forward 하고 싶을 때
2. commit 내역을 한 줄로 계속 이어서 남기고 싶을 때
>> 실제로 사용하는 방법
git switch 새로운브랜치
git rebase main
git switch main
git merge 새로운브랜치
1. 새로운 브랜치로 이동
2. git rebase main
3. 그럼 브랜치가 main 브랜치의 끝으로 이동
4. 그걸 fast-forward merge 하면 된다.
※ rebase의 단점
- 브랜치끼리 차이가 너무 많은 경우 rebase하면 충돌이 많이 발생할 수 있음
squash and merge
모든 브랜치를 3-way merge 하면 대참사가 날 수 있음
이런 상황을 피하고 싶다면 rebase 아니면 squash and merge 하면 된다.
squash and merge를 하면 3-way merge처럼 선으로 이어주지 않고
새 브랜치에 있던 코드 변경사항들이 main 브랜치로 텔레포트 하게 된다.
=> 이러면 git log 했을 때 merge 완료된 브랜치의 commit은 출력되지 않음
git switch main
git merge --squash 브랜치명
git commit -m '메세지'