- 🔖 목적
- 🔖 미리 설치하면 좋은 도구들
- 🔖 Todo App 개발시, 브런치 및 커밋 예시
- 🔖 git rebase
- 🔖 cherry pick
- 🔖 브런치를 합치는 3가지 방법
- 🔖 기타 참고 사항
- 🔖 참고자료
- 실무나가서 사용할 수 있는, 코드리뷰를 위한 깃(허브) 사용법 익히기
- cherry pick, rebase 등을 활용하여 커밋 및 브런치 다루기
- 특정 브런치에서 커밋 내용 나누기
- Fig: 터미널 자동완성
- Zshell-hangul: $햣 commit -> $git commit
- The Fuck: $gut commit -> $git commit
-
핵심: 커밋을 자주 활용하여 히스토리 남기기 for 코드리뷰
🧭 브런치 main -> Tidy up
✏️ 커밋 메시지🔥 create-vite-app 이 만들어준 쓸데없는 파일 제거
- 이미지, css, 기본 페이지 제거함🧭 브런치 main -> feat/main-page
✏️ 커밋 메시지🏷️ Todo Type 추가
- title, id, completed✨ TodoList, TodoItem 컴포넌트 추가
- 기본적인 뼈대만 구현✨ Header 추가
- 사용자가 투두를 추가할 수 있는 뷰 구현✨ addTodo 기능 추가
- 투두가 추가되는 로직 구현- Github PR 예시 1
- Github PR 예시 2 (with PR 포인트)
- Comment에 담기는 내용
- 템플릿에 따라 다르지만, 설명하고자 하는 PR 포인트를 작성하면 좋음
- PR 포인트는 커밋 히스토리에 뜨는, 커밋 해쉬 값의 링크를 가져오면 알아서 해줌!
(커밋 메시지를 코멘트 창에 보여줌)
- PR 포인트는 커밋 히스토리에 뜨는, 커밋 해쉬 값의 링크를 가져오면 알아서 해줌!
- 템플릿에 따라 다르지만, 설명하고자 하는 PR 포인트를 작성하면 좋음
- 리모트 저장소에 올라간 커밋 변경하기
- VSCode의 확장프로그램인 GitLens가 설치되어 있다는 것을 가정
- 터미널에서 코드에디터를 vim이 아닌 VSCode로 세팅하기
git config --global core.editor "code --wait"
- git rebase -i [커밋]
-
pick (p)
- 커밋을 그대로 유지
- 커밋의 순서를 바꾸거나, 커밋 자체를 삭제할 수 있음
-
reword (r)
- 커밋 메시지 수정
- 해당 명령어 작성 후, 편집기를 닫으면, 해당 커밋을 수정할 수 있는 편집기가 또 뜸
-
edit (e)
- 커밋의 작업 내용(커밋 메시지 포함)도 수정할 수 있도록 해줌
- 편집기를 닫으면, 해당 커밋으로 HEAD가 옮겨짐
- 커밋 수정 ->
git commit --amend
- 중간 커밋 추가 ->
git add 및 commit -m
- 수정 완료 ->
git rebase --continue
-
squash (s), fixup (f)
- 해당 커밋을 이전 커밋과 합치는 것
- 대체로, PR merge시에 squash 머지 옵션이 있음
- squash는 커밋 메시지를 합치는 것이고, fixup은 이전의 커밋 메시지만 남김
-
exec (e)
- 리베이스 도중 실행할 쉘 커맨드를 작성할 수 있음
-
break (b)
- 해당 라인에서 rebase를 일시중지 하라는 의미
pick ~~ / pick ~~ / break / pick ~~
이런 식으로 작성하면,
break 라인에서 rebase가 일시중지 됨- 직전 커밋까지 리베이스를 마치게 되고,
git rebase --continue
명령어를 통해 다시 리베이스를 진행할 수 있음
-
drop (d)
- 해당 커밋을 명싲거으로 삭제하는 명령어
- pick 명령어로 삭제하는 것과 동일
-
merge (m)
- merge 커밋을 만들면서 merge하는 명령어
- 다른 브런치의 커밋 해시를 활용하면 됨
merge asdf23452
- 이미 원격에 push 된 상태라면, 주의가 필요
- 로컬에서 수정된 커밋 내용을 원격에 push 하기 위해서는,
git push -f
명령어를 사용해야 함- 단, 해당 브런치에서 함께 작업하는 동료가 있다면 주의가 필요
⚠️ 리베이스는 기존의 커밋을 재사용하지 않고, 내용이 같은 커밋을 만들어버림
- 다른 브런치에 있는 커밋을 선택적으로 브런치에 적용시키는 명령어
- 다른 브런치에 있는 커밋을 현재 브런치에 적용시키고 싶을 때
- 브런치의 커밋을 타 브런치로 옮기고 싶을 때
git cherry-pick 커밋 해시
- X 브런치에서 Y 브런치의 커밋을 가져오고 싶을 때
- cherry-pick은 커밋을 복사하는 것으로,
기존 브런치에도 커밋이 남아있음
- A 브런치에서 B 브런치를 합칠때, 시간의 순서대로 커밋이 재 정렬되어 머지됨
- 또한 마지막에 MC (Merge Commit)이 하나 더 붙게 되는데,
병합에 대한 충돌이 있을 때 뒤에 Commit을 붙여 해결
- A 브런치에서 B 브런치를 합칠때, 커밋의 순서와 상관없이, B브런치의 커밋을 A브런치 커밋 뒤에 붙임
- MC와 같은 충돌 해결 커밋이 생기지 않는데, 이것은 B 브런치의 커밋들이 수정되기 때문
- 위와 같은 이유로 리모트에 올리기 위해서는
git push -f
가 필요함
-
❓ 담당하는 역할이 많았음 (브런치 변경 + 작업 파일 복구)
-
git checkout
- 브런치 변경 및 작업 트리 파일 복구
-
git switch
- 브런치 변경
- 브런치를 생성하면서 이동하려면
git swtich -c feat
-
git restore
- 작업 중인 파일 중 마지막 커밋에 해당하는 상태로 되돌리고자 할때 사용
git restore README.md
- 기존에는
git checkout -- README.md
였음