git again...

sun·2021년 12월 9일
0

Today I Learned

목록 보기
4/4

시각적으로 깃을 공부할 수 있는 사이트

  • HEAD : symbolic name for the currently checked out commit -- the commit we're working on top of
  • git rebase to from : tofromrebase 즉, 새로운 to 브랜치에 from 의 커밋들을 새로운 커밋처럼 추가한다

  • git cherry-pick commitHash : 나열한 커밋들을 현재 헤드에 추가

  • git branch -f branchToMove to : tobranchToMove 이동
  • git checkout HEAD~# : 헤드를 현재 위치에서 # 만큼 이동
  • git checkout commitHash : 해당 커밋으로 헤드 이동
  • git reset HEAD~# : 현재 브랜치의 커밋에서 #만큼 뒤로 이동
  • git pull : git fetch + git merge
  • 리모트 레포에서 깃 클론해서 로컬 레포를 만들면, 리모트 레포의 상태를 나타내는 origin/main 브랜치와 우리가 실제 작업할 main 브랜치가 생성된다. 우리가 main 브랜치에서 작업을 한 다음 커밋해서 푸쉬하면 리모트 레포의 메인 브랜치가 푸쉬를 반영해서 업데이트되고, 우리의 로컬 레포에 있는 origin/main 브랜치도 리모트 레포의 메인 브랜치가 업데이트됨에 따라 업데이트된다
    • fetch 하면 일단 origin/main 브랜치가 리모트의 origin 브랜치의 상태를 불러오는 것

    • 로컬의 main (이하 로컬 브랜치) 과 origin/main (이하 리모트 브랜치) 브랜치가 연동되는 것은 로컬 브랜치가 리모트 브랜치는 remote tracking 하고 있기 때문(이 관계는 깃이 자동으로 설정해줌). 이 덕분에 리모트의 어디에 푸시하면 되는지 알 수 있는 것
      • 따라서 헤드가 remote-tracking repository 를 가리키고 있지 않으면 어디에 푸시해야되는 지 몰라서 푸시가 안됨!
  • git pull --rebase : fetch + rebase
  • rebase 를 사용하면 커밋 트리가 깔끔하다는 장점이 있지만 커밋 히스토리가 왜곡될 수 있으므로(commit2를 먼저 끝냈는데 commit3에 리베이스되면 나중에 끝낸 것처럼 보임) rebasemerge 냐는 취향차이다.
  • git push origin main 의 의미: 로컬 레포의 main 브랜치에 가서 모든 커밋을 가져온 다음 리모트 레포의 main 브랜치에 가서 없는 커밋들을 넣어준다.
  • git push origin localSource : remoteDestination 과 같이 지정하면 위와 달리 로컬 레포와 리모트 레포에서의 브랜치 명이 달라도 푸쉬할 수 있다

  • git push origin :remoteBranch 를 하면 리모트 레포의 브랜치를 삭제할 수 있다

  • rebasesquash + merge 가 깃트리 상에서는 결론적으로 유사해보여서 무슨 차이일까 고민했는데 히스토리를 보니까 rebase 는 정말로 머지의 흔적조차 안남는다면 후자는 머지의 흔적이 남기는 하는 것 같다 깃트리가 하나로 보이지만 아마 실제로는 아니거나 암튼..

    • 아래에서 2-2, 2-1 이 그냥 merge, squashsquash + merge 그리고 4-1, 4-2 가 rebase 한 것
  • 이슈 생성해서 커밋이랑 연결해주고 싶으면 커밋 메세지에 #issueNumber 를 포함해 주면 됨
    e.g. git commit -m "[feat] commitDescription #issueNumber"

☀️ 느낀점

  • 드디어...드디어 깃 찍먹을 제대로 한 느낌...
profile
☀️

0개의 댓글