새로 배운 git

개발 이력 보기

git log --oneline | wc -l
git shortlog -sn | nl
git shortlog -sn -- mnist | nl
git shortlog --after=2018-01-01 -sn -- mnist/ | nl
git log --oneline --no-merges

git shortlog -h | grep summary
-> -s는 개발자별 commit 개수 요약
git shortlog -h | grep number
-> -n는 개발자별 commit 개수 순위 정리

오픈소스 프로젝트 파악하는 요령

  • 인기도, 소프트웨어 가치
    • start 개수 = 좋아요 개수
    • 인기 있는 free software 일 수 있다.
  • 협업, 활성화 정도
    • commit 개수
    • contributor 인원수
    • 오픈소스 본질 = 협업, 리뷰, 토론
  • “몇번이나 수정된 프로젝트야?”
  • “누가 개발을 많이 해?”
  • “수정 내역들을 한줄씩 요약해서 보자”
    • commit message : 수정의 이유를 작성
      • Improve : 원래 잘 되는 것 개선, 10초 -> 5초와 같이 개선한 것
      • Add : 없던 기능, 옵션 추가
      • Support : 윈도우 -> 리눅스, x86 -> ARM
      • Refactor : 코드를 재배치
      • Remove : 필요없는 것 제거
  • git show 6c8e2ba grep “diff –git”
  • git log –before=2020-06-30 –after=2020-06-01 –oneline wc -l
  • git log –oneline –reverse head -3

Rebase 관련

  • git remote -v
  • git remote remove origin
  • git remote add origin “fork한 프로젝트 URL”

  • 팀 프로젝트 url 등록
    • git remote add upstream “오픈소스 프로젝트 URL”
  • 최신 히스토리 가져오기
    • 내부 브랜치 자동 생성 upstream/master
    • git fetch upstream master
  • 베이스 최신화
    • git rebase upstream/master
  • 강제로 fork한 프로젝트를 갱신
    • git push origin fix-mnist –force
  • upstream : 오픈소스 프로젝트 url
  • origin : fork해서 만든 프로젝트 url

  • 원상복구
    • git stash
    • git checkout – mnist/main.py
      • checkout 명령어 의미
        • 도서관에서 책을 대출받을 때, .git 히스토리 창고에서 파일을 가져온다.
    • git reset (add 취소)
    • git reset –hard HEAD~1 (첫번째 commit 삭제)
  • git commit -s 옵션
    • commit message에 signed-off-by(이름과 이메일)
    • 라이센스 동의 -> 서명절차
    • 라이센스 동의 절차 안했을 때 프로젝트에 PR 전송하면 cla no 라벨이 붙음.
  • 가장 최신 commit 수정(amend)
    • 일단 고침
    • git add
    • git commit –amend
    • 깃허브에 있는 것은 force push
  • 중간 commit 수정은 rewind 기능

rewind 실습

  • rebase 과정
    • fetch
      • git fetch upstream master
    • rewind
      • git rebase upstream/master (rebase, fetch, rewind)
  • git rebase -i, –interactive (되감기 기능)
    • 8 commits을 수정해야하는 상황
  • 가장 오래된 history에서 두번째 commit 이후에 commit 3개 넣기
    • git rebase -i –root(전체) / git rebase -i HEAD~10(최근 10개)
    • pick을 edit으로 변경
    • git log –oneline
    • git rebase –continue
      • 옛날 commit으로 돌아가서 commit하고 continue함.
    • 초기화 하려면
      • git reset –hard origin/master
  • 두 친구 병합
    • git rebase -i root
    • git commit –amend
  • rebase 도중에 취소하는 것
    • git rebase –abort

blame

  • Parser 클래스 만든 최초 commit을 찾아내기
    • git blame
    • git log –oneline –reverse – src/node_http_parser.cc head -1