💪 Git Rebase 집중실습
원하는 history 위치에 commit을 끼워넣기
- rebase를 interactive rewind (감아주기)
- 원하는 위치의 커밋을 edit해줌
- 파일 변경
- 파일 변경분을 add, commit 한 후
- 감았던 커밋을 풀어준다
→ 그럼 만약 —root
키워드를 집어넣지 않는다면? → 이상한 일이 일어나는데...
→ 중도에 rebase 취소하고 싶을 경우엔 —abort
→ commit 역사를 복구하고 싶을 경우 : —hard origin/master
commit 3개를 1개로 합치기(amend)
- rebase를 interactive rewind(감아주기)
- 원하는 위치의 커밋을 edit
- 합치길 원하는 커밋만큼 커밋 취소
—amend
로 취소해준 커밋을 합쳐준다- 감았던 커밋을 풀어준다
commit 수정할때 사용하는 명령어들
git reset —soft HEAD~1
: commit은 취소하고 파일 변경분의 기록은 남겨둔다. (커밋 수정시 사용)
git reset —hard HEAD~1
: commit도 취소하고 파일 변경분의 기록도 지운다! (커밋 삭제할 때 사용)
git commit —amend
: add한 히스토리를 commit에 덮어씌워 최근 커밋을 수정한다! 이때 커밋 아이디도 바뀌기 때문에 push할 때 —force
를 해줘야 한다.
가장 오래된 history에서 두번째 커밋 삭제하기
- root까지 rebase 감기 (
-i —root
) - 원하는 위치의 커밋을 edit
- 원하는 커밋을 삭제해준다
- 감았던 커밋을 rewind해준다
마지막으로 수정한 사람 추적하기
git blame <파일명>
: 수정한 사람/날짜/커밋 아이디가 나오는 명령어
커밋 역사 추적 — git blame/ git reset — hard
git blame
으로 원하는 라인의 커밋 아이디 찾기- 해당 라인의 커밋아이디로
reset —hard
하면 원하는 히스토리의 시점으로 이동 가능
→ 다시 현 시점으로 돌아오려면 git reset —hard origin/master
진짜 최초 커밋을 더 쉽게! 찾아내기
git log —reverse — <파일명> : 가장 오래된 로그부터 출력
프로젝트 자체의 최초커밋 찾기
git log —oneline —reverse | head -n : 원하는 라인만큼 역순의 로그를 찍는다
❤️ blame은 대체 왜 하느냐?
히스토리를 기반으로 이전에 만든 사람이 어떤 의도로 만들었는지 파악할 수 있다 → 너의 의도는 이런 것 같은데, 네가 고려하지 않은 부분들 때문에 문제가 생겼고, 너의 이런 빈틈을 내가 보완하기 위해 작업을 했다고 어필할 수 있다!!!!!!
팀 협업 실습에서 나온 내용
- github에서 Organization 계정 만들기 → 개인 계정으로 fork 뜨기
git remote rename origin upstream
: remote repo의 이름을 수정- conflict 발생은 interactive(
-i
) 걸린 것과 비슷하다
Commit Message 작성 가이드
반드시 이렇게 해야하는 것은 아니지만, 이렇게 하면 좋다!
// 제목
키워드 : 이슈 한줄 요약// 내용
원인설명 (내용의 80%)
해결설명 (내용의 20%)// 전후 비교
Before:
// 간단한 이전 코드 몇줄
After:
// 간단한 이후 코드 몇줄// 커밋 아이디 첨부
<commit ID>에 이러이러한 문제가 있었다....
// 또는 이슈 넘버
Fixes : <issue Number>// 연관된 사람
Reviewed-by: (리뷰받고 싶은 사람)
Reported-by: (보고해준 사람)
Suggested-by: (제안해준 사람)
Signed-off-by: (내 서명)// 참조
Cc: (참조할 사람)
- 커밋에 대한 정보가 명료하고 구체적이어야 한다!
- 이 프로젝트에 자주 컨트리뷰트하는 사람을 참조 걸면 그 사람이 내 PR을 리뷰 잘 해준다 → 관심을 받을 수 있다 :)
용어
메인테이너 : 프로젝트의 owner
리뷰어 : 리뷰해주는 사람들..굉장히 중요한 사람들!
commit 단위의 이상적인 양
- 작을수록 좋다! → **’어떤 목적으로 만들었는지’**가 중요. 한번에 한 가지 일을 하는게 가독성이 좋다. 커밋의 목적은 협업이기 때문에 read와 discussion하기 좋은 단위로 만든다!
- 당연히 컴파일 에러가 나면 안된다