Git 이모저모

mtak·2022년 1월 5일
0

🧚‍♂️파일에 기여한 사람이 누구인지 알고 싶다.

git shortlog

기여한 사람과 기여 횟수, 커밋 메시지를 볼 수 있다.

git shortlog -sn

기여한 사람과 횟수만 볼 수 있다.

git shortlog -sn | nl

위에거를 터미널에 출력해준다.

git shortlog -- 파일 이름 또는 폴더 이름

해당 파일/폴더 기여자의 해당파일 커밋 로그를 보여줌

🧚‍♂️커밋 로그를 보고싶다

git log

전체 커밋 로그 보여줌

git log --oneline

커밋 로그를 한줄로 보여줌

wc -l

커밋 몇번 했는지 궁금할 때 체크

git show 커밋 아이디

커밋 내용 상세 조회

grep "diff"

파일 뭐 수정했는지 볼 수 있음

--no-merges

머지 커밋(소스 수정이 없는 커밋) 빼고 볼 수 있음

--reverse

커밋 로그 역순 정렬해서 보여줘

🧚‍add를 취소하고 싶다!

git reset HEAD 파일 이름

🧚‍Untracked파일을 삭제하고 싶다

$ git clean -f
// 디렉터리를 제외한 파일들만 삭제

$ git clean -f -d
// 디렉터리까지 삭제

$ git clean -f -d -x
// ignored 된 파일까지 삭제

🧚‍git commit 을 취소하고 싶다!

  1. commit을 취소하고 해당 파일들은 staged 상태로 워킹 디렉터리에 보존

    $ git reset --soft HEAD^

  2. commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에 보존

    $ git reset --mixed HEAD^ // 기본 옵션

    $ git reset HEAD^ // 위와 동일

    $ git reset HEAD~2 // 마지막 2개의 commit을 취소

  3. commit을 취소하고 해당 파일들은 unstaged 상태로 워킹 디렉터리에서 삭제

    $ git reset --hard HEAD^

🧚‍commit msg를 변경하고 싶다

git commit --amend

🧚‍git push를 취소하고 싶다

이 명령을 사용하면 자신의 local의 내용을 remote에 강제로 덮어쓰기를 하는 것이기 때문에 주의해야 한다.

  • 되돌아간 commit 이후의 모든 commit 정보가 사라지기 때문에 주의해야 한다.
  • 특히, 협업 프로젝트에서는 동기화 문제가 발생할 수 있으므로 팀원과 상의 후 진행하는 것이 좋다.
  1. 가장 최근의 commit을 취소한다.

    $ git reset HEAD^// 가장 최근의 commit을 취소 (기본 옵션: --mixed)

  2. 원하는 시점으로 워킹 디렉터리를 되돌린다.

    // Reflog(브랜치와 HEAD가 지난 몇 달 동안에 가리켰었던 커밋) 목록 확인$ git reflog 또는 $ git log -g

    // 원하는 시점으로 워킹 디렉터리를 되돌린다.$ git reset HEAD@{number} 또는 $ git reset [commit id]

  3. 되돌려진 상태에서 다시 commit을 한다.

    $ git commit -m "Write commit messages"

  4. 원격 저장소에 강제로 push 한다.

$ git push -f origin [branch name]

🧚‍Branch를 만들고 싶다

내가 담당한 기능을 개발하기 위해 브랜치를 만든다.

git checkout -b [브랜치명]
  • b [브랜치명] : 브랜치를 생성한다.
  • checkout [브랜치명] : 해당 브랜치로 이동한다.
  • git branch : 존재하는 브랜치 확인.

🧚‍소스파일 수정 후 add, commit 전에 최신 히스토리와의 차이점 궁금하다

git diff

🧚‍수정한 파일을 복구할래

git checkout -- 파일 명

local git 저장소에서 최신 히스토리 상태를 가져온다

🧚‍내 PR base에 팀의 최신 히스토리를 업데이트 하고 싶어

base란? 내가 작업하기 전의 최신 히스토리를 말한다.

내 PR이 Merge되기 전, 다른 사람의 PR이 먼저 프로젝트에 반영될 수 있다. 그러면 내 PR base에 팀프로젝트의 최신 히스토리를 업데이트 하는 작업이 필요하다.

즉 base를 업데이트 하는 작업을 해야하고 이를 rebase라고 부른다.

git 명령어는 fetch 를 사용한다.

# 1. 공식 upstream 저장소에서 최신 commit history 가져오기
$ git fetch upstream master

# 2. 최신 commit history 기준으로 베이스 갱신 (rebase)
$ git rebase upstream/master

# 3. Fork 한 저장소(GitHub)도 수정하기 (PR 자동 갱신)
$ git push --force origin fix-mnist
  1. 공식 프로젝트 upstream 저장소의 base를 가져온다. pull 은 fetch + merge 기 때문에 fetch를 사용한다.
  2. 가져온 base를 내 upstream 리모트에 rebase 명령어로 적용한다.
  3. fork 한 내 원격저장소에 force push 한다. 이때 PR은 자동 갱신된다.
    • 오픈소스 프로젝트 매커니즘에서는 force push를 필수로 사용한다.

🧚‍코드 리뷰를 받을 수 없고 혼자 개발을 진행하는 경우 로컬에서 머지한다!

git  rebase 이전 브랜치명
git checkout 이전 브랜치명
git pull --rebase=preserve
git merge 작업한 브랜치명
git push origin -d 작업한 브랜치 && git branch -d 작업한 브랜치
profile
노는게 젤 조아. 친구들 모여라!!

0개의 댓글