나의 개발 성장일지
깃사용법 본문
1.작업폴더설정하기
1-1-1 powersherll로 터미널열기
1-1-2 git 유저이름 세팅

1-1-3 작업폴더에서 powershell열고 git inti->이제 git이 파일생성하는거추척

1-1-4 git add 파일명,git commit -m "추가메시지"-> 파일의 현재상태기록하기

2. 용어정리

여기서 가운데 부분을 staging area,
파일버전이 저장되는 곳을 repository (저장소) 라고 합니다.
1. staging area는 commit을 하기 전에 commit할 파일들을 골라놓는 곳입니다.
그리고 staging area에 파일넣는 행위를 staging이라고 합니다.
git add 명령어로 staging 할 수 있습니다.
2. repository는 commit된 파일의 버전들을 모아놓는 곳입니다.
repository의 실체를 구경하고 싶으면 작업폴더안에 숨겨져 있는 .git 폴더 열어보면 됩니다.
아무튼 staging area & repository 2개는 자주 쓰는 용어니까 잘 외워둡시다.
3.다른명령어들
3-1 git add 파일명1,파일명2-> 여러파일 동시에 staging
3-2 git add . -> 작업폴더의 모든파일 staging
3-3 git status - > 변경된파일 ,스테이징된파일 알려줌
3-4 git restore --staged 파일명 ->스테이징된파일 취소하기 쩜찍으면 모두취소
3-5 git commit -m '메시지' ->최종 commit시 메시지같이 추가할수있음
4.vs코드에서 적용해보기
4-1 파일변경된목록이 나옴
4-2 +를 누르면 스테이징됨
4-3 커밋을 레파지토리로 이동됨

5.에디터로 커밋된 파일 전후 비교하기
5-1 extension->git graph다운 ->깃 커밋된 파일 볼수있음 ->비교도가능
6.프로젝트복사본에 먼저 개발해보기


6-1 git branch 브렌치이름->프로젝트 사본생성
6-2 git switch 브렌치이름-> 해당브랜치로 이동
6-3 git log --graph --oneline --all -> 브랜치와 커밋내역을 그래프로보여줌
7.branch 합치기

7-1 main/master 브랜치로 다시이동-> git switch main
7-2 git merge 브랜치명으로 합치기
8 branch 충돌
8-1 master branch와 복사본 branch가 같은파일 같은줄을 선택했으면 둘중선택해야함

8-2

9.협업시 branch 사용하면장점
협업시 branch 유용함
여러 개발자들과 협업할 때도 branch를 만들어서 하면 편리합니다.
같은 프로그램을 만드는데 10명이서 동시에 똑같은 소스코드를 수정하고 저장해버리면 난리가 나지 않을까요.
그래서 기능을 하나 추가하고 싶으면
1. 우선 branch로 프로젝트 사본을 만들어서 거기서 먼저 개발을 진행합니다.
2. 그리고 테스트해봤는데 잘 된다면 main branch 에 다시 합칩니다.
그렇게 개발하면 더 안정적으로 개발이 가능하겠군요.
10 요약
브랜치 생성은 git branch 브랜치명
브랜치 이동은 git switch 브랜치명
브랜치 합치기는 main/master 브랜치로 이동한 뒤에 git merge 브랜치명
브랜치마다 commit 내역을 그래프로 보고싶으면 git log --graph --oneline --all
브랜치 합칠 때 conflict가 발생하면 파일열어서 수정하고 git add, git commit 하기
11 3way merge
저번시간에 했던 것 처럼
브랜치에 각각 신규 commit이 1회 이상 있는 경우
merge 명령을 내리면 두 브랜치의 코드를 합쳐서 새로운 commit을 자동으로 생성해주는데

이걸 3-way merge 라고 부릅니다.
이게 merge의 기본 동작방식입니다.
12. fast-forward merge
가끔은 새로운 브랜치에만 commit 이 있고
기준이 되는 브랜치에는 신규 commit 이 없는 경우가 있습니다.

이 경우 merge 하게 되면 "fast-forward merge 되었습니다" 라고 알려줍니다.
fast-forward merge가 뭐냐면
딱히 합칠게 없어서 그냥 신규브랜치 보고
"지금부터 니 이름은 main 브랜치여" 하는 것입니다.
그래도 결과는 어짜피 같지 않을까요.
13. 브랜치 삭제하기
3-way, fast-forward 아무렇게나 merge 해도
브랜치를 merge 하고 나면 브랜치가 자동으로 삭제되진 않습니다.
git branch -d 브랜치이름
git branch -D 브랜치이름
둘 중 하나 사용하면 이제 필요없는 브랜치를 삭제할 수 있습니다.
병합이 완료된 브랜치 삭제시엔 -d 이것만 해도 되는데
병합하지 않은 브랜치 삭제시엔 -D 이거 해야함
심심하면 저번에 만든 coupon 브랜치 삭제하고 어떻게 보이는지 확인해봅시다.
14. rebase and merge
브랜치를 rebase 하고 나서 merge 하는 짓거리도 가능합니다.
일단 rebase가 뭐냐면

rebase는 브랜치의 시작점을 다른 commit으로 옮겨주는 행위입니다.
1. rebase를 이용해서 신규브랜치의 시작점을 main 브랜치 최근 commit으로 옮긴 다음
2. fast-forward merge하는 것입니다.
이런 식으로도 브랜치 합치기가 가능하겠군요.
왜 이따구로 하냐고요?
1. 3-way merge 말고 강제로 fast-forward 하고 싶을 때
2. 브랜치 그딴거 필요없이도 코드 잘짜는 고수같은 느낌을 주고 싶을 때
그러고 싶으면 일반 3-way merge 대신 rebase & merge 해도 됩니다.
그래서 실제로 rebase and merge 하고 싶으면
1. 새로운 브랜치로 먼저 이동해서
2. git rebase main 하면 됩니다.
3. 그럼 브랜치가 main 브랜치 끝으로 이동하는데 그걸 fast-forward merge 하면 됩니다.
git switch 새로운브랜치
git rebase main
git switch main
git merge 새로운브랜치
차례로 입력하면 rebase 끝입니다.
rebase & merge를 한 줄로 쉽게 비유하자면 강제 fast-forward merge입니다.
직접 새로운 브랜치 만들고 commit 몇 번 하고 rebase 해보십시오.
당연히 main 말고 다른 브랜치끼리도 가능합니다.
물론 단점도 있는데
브랜치끼리 차이가 너무 많은 경우 rebase하면 충돌이 많이 발생할 수 있는데 그거 하나하나 해결하기 귀찮습니다.
15. squash and merge
님들 대충 모든 브랜치를 3-way merge 해버리면 나중에 참사가 일어날 수 있습니다.

왜냐면
(1) 3-way merge 된 것들은 매우 복잡해보임
(2) main 브랜치 git log 출력해보면 3-way merge된 브랜치들의 commit 내역도 다 같이 출력되어서 더러워짐
이런 현상이 있습니다.
그러기 싫으면 rebase 아니면 squash and merge 하면 됩니다.
그거 쓰면 새로운 브랜치에 있던 commit 들을 연결해주는게 아니라 똑 떼와서 main 브랜치에 붙여주기 때문에
1번과 2번걱정을 안해도 됩니다.
rebase는 아까 배웠고
squash and merge 이거 하면 어떻게 되냐면
3-way merge처럼 선으로 이어주지 않고
새 브랜치에 있던 코드변경사항들이 main 브랜치로 텔레포트합니다.

그럼 이제 main 브랜치의 git log 출력해볼 때
merge 완료된 브랜치의 commit 같은 것들은 출력되지 않습니다.
그게 왜 좋은거냐고요?
이런건 님들이 직접 해봐야 체감이 되는 것이기 때문에 3-way merge 많이 해보든가 하십시오.
git switch main
git merge --squash 브랜치명
git commit -m '메세지'
squash and merge 하는 법은 그냥 --squash 옵션을 추가하면 끝입니다.
님들이 브랜치에서 만들어놨던 많은 commit 을 다 합쳐서
하나의 commit으로 main 브랜치에 생성해줍니다.

▲ 그냥 merge 했을 경우

▲ merge --squash 했을 경우
결과는 둘 다 똑같은데 한 놈은 선으로 이어져있고 한 놈은 텔레포트했을 뿐입니다.
결론은 :
브랜치 100개 만들어놨는데 일반 merge를 잔뜩 해놓으면 나중에 git log 그래프가 매우 복잡해질 수 있습니다.
그게 싫으면 squash 해보십시오. 또는 rebase 해도 마찬가지로 해결가능합니다.
16. git restore
16-1 파일하나 되돌리기-> git restore 파일명-> 최근 commit상태로 돌아감
16-2 스테이징 파일취소 - > git restore --staged 파일명
'개인 프로젝트 > 쇼핑몰 만드는 과정' 카테고리의 다른 글
| 현재까지 보완해야할것 (0) | 2022.12.15 |
|---|---|
| 깃허브 사용법 (0) | 2022.12.15 |
| 리액트 프로젝트 환경설정 (0) | 2022.12.15 |
| 자바스크립트의 동기와 비동기 (0) | 2022.12.15 |
| 리액트정리 6 (0) | 2022.12.15 |