오픈소스 컨트리뷰션 아카데미에서 진행된 Git/Github 고급 실습 강의를 정리한 내용입니다.
fetch
- 언제 사용?
- Origin(fork 해온 상태)과 Upstream(현재 원본 repo 상태)다를 때, 추가된 commit을 가져오고 싶을 때 활용
- 히스토리 창고(.git)에만 저장
git fetch upstream master
pull = fetch + merge
upstream/master
라는 branch 이름이 자동으로 생성 됨
rebase
- 현재 Base를 최신으로 갱신한다
- 내가 사용 중인 Base가 최신 것이 아니면 오류 발생할 수 있음
- 만약 내가 수정한 코드가 다른 사람이 최근에 수정된 코드가 동일한 파일에서 나왔을 경우
git rebase upstream/master
- rebase 단계
- 1단계 : rewind
- 2단계 : rebase
- 3단계 : 새로운 내용 commit
- 3 단계 error → commit이 되지 않은 상태
- → amend 사용 X
git rebase -i --root
- 돌아가고 싶은 시점을 pick에서 edit으로 변경
-i
: interactive 기능 → 언제 사용?- 리뷰/토론 → 수정 사항 관리
- ex) 두번째 commit은 삭제하고, 세번째 commit은 3개로 나누고, 네번째 commit은 메시지 수정하고 …
- → rewind 과정
git rebase --continue
- ex) 중간에 3개 commit 넣고 다시 HEAD 변경
- → rewind에서 원하는 작업한 후에 다시 되돌리기
git reset --soft HEAD~1
- soft는 파일은 그대로 두고 commit 내역만 삭제
git commit --amend
: commit 메시지 변경- rebase 취소?
git rebase --abort
- rebase → commit 수가 적으면 괜찮지만 많으면 rewind 시 시간이 너무 오래 걸림!
Blame
- 해당 소스 라인을 누가 마지막으로 수정 했는지 commit ID 추적이 가능
- 언제 사용?
- 특정 소스 라인을 수정해야 하는 상황
- ex) 760 라인에 문제가 있다고 판단한 상황 가정
- 760 라인을 만든 commit을 찾아내 이해
- 누구인지 궁금? Blame!
- bug fix commit 생성
- 제출
- 760 라인을 만든 commit을 찾아내 이해
- ex) 760 라인에 문제가 있다고 판단한 상황 가정
- 소스 분석 / 리딩
- 라인 별 분석해 이유를 파악 함
- 클래스, 함수 추가 → 역추적
- 특정 소스 라인을 수정해야 하는 상황
Github Blame
- [ic]+[/ic] : 추가된 코드
-
- [ic]+[/ic] 가 최초로 나온 경우 첫 등록 됐다고 할 수 있음
-
- [ic] - [/ic]: 삭제된 코드
- 생성자, 함수 정의 부분을 따라가면 최초 commit을 찾을 확률이 높음
git log --oneline --reverse node_http_parser.cc | head -1
- 파일이 생성된 최초 commit 확인할 때는 폴더가 변경됐을 수도 있음을 고려
upstream
- 원본이 담긴 repo
git remote -v
: 사용해서 upstream 없다면 등록!git remote add upstream https://github.com/oss-test-A06~~
git fecth upstream master