4. Git commit 정리

정현우·2021년 9월 12일
2

Git Basic to Advanced

목록 보기
4/9
post-thumbnail

Git commit 정리

commit 정리를 왜해?

  • 앞선 (3)장에 이어, commit을 정리 하는 방법에 대해서는 rebase / commit --amend / merge --squash (스쿼시 머지) 정도로 볼 수 있다. 물론 때에 적절한 reset은 당연하다. 위 사항에 대해 rebase를 중점적으로 시작해 살펴보자.
  • commit을 정리하는 것은 우리가 언제든지 쉽게 rollback 할 수 있는 포인트를 만드는 것과 같다. 그리고 commit이 난잡하면 코드 트레이싱을 하는 것 또한 굉장히 난해해 진다.
  • 나 '혼자' 라면 commit을 나만 알아보게 하면 된다. 하지만 여러명에서 다 같이, diff를 살펴보고, 어떤 기능이 추가 되었는지, 또 에러가 발생할 경우 추적이 용이하게 하려면 이쁜 commit을 만드는 것은 너무나 당연하다. 우린 그 부분을 체크해 볼 것 이다.

아직 와닿지 않는다면, (4)는 뛰어 넘고 우선 '원격 저장소' 까지 다 파악하고, 브랜치 몇개씩 파 보고, 작업 다양하게 해 본 뒤에, 다시 돌아오자!


Git rebase

Git rebase target-branch

  • git rebase는 단순하게 말하면 merge의 또다른 방법 중 하나이다. 그리고 conflict 해결에 아주 유용하다.
  • rebase의 존재 목표는 "git branch들의 그래프를 선형으로 만드는 것" 이다.


  • 실제 commit/merge graph를 살펴보면 merge와 차이점이 더 와닿는다.


  • 위 두 그림의 커밋 지점이 어떻게 되어 있는지 보면 와닿는다.
    • 1번 사진은 일반적인 merge(non-fast-forward)방식이고,
    • 2번이 master기점으로 rebase방식으로 branch를 합쳐서 commit이 2번째 사진과 같이 남는다.

Git rebase로 conflict 해결까지

  • git rebase target-branch
  • rebase 병합을 하려는 브랜치로 가서, 위 명령어를 치면 된다. conflict를 가정하고, 시뮬레이션을 해보자!


  • rebase를 통해 target-branch의 'commit(snap shot)'기점으로 병합을 하나씩 시작한다. 충돌이 있을 경우, 해당 커밋에서 stop된 상태로 status에서 나오는 사진과 같이 해당 conflict를 하고, 다음 commit지점으로 병합을 진행할 수 있다.


  • 충돌을 해결하고, add, commit을 해주고, git rebase --continue를 통해서 다음 commit 지점으로 병합을 계속 진행할 수 있다.
  • rebase를 진행하니 함부로 conflict부분을 수정하고 해결하기 힘들 수 있다.
  • 그럴때는 git rebase --abort 로 rebase진행을 취소하고 제대로 체크한 뒤 다시 진행하자. (물론 무지성 continue후 revert(or reset)을 통해 되돌릴 수 있다.) --abort 옵션은 merge에서도 사용가능하다.

  • 허나 rebase를 반대하는 의견들도 있다. 그 이유는 이력이 단순해지면서, 원래 커밋 이력이 변경되기 때문이다. 그래서 '누가 어떻게 무엇을' 한 아주 정확한 이력을 남길 필요가 있다면, rebase는 사용을 권하지 않는다.
  • rebase -i option 에 대해 자세히 알아보자

Git merge --squash

  • 가나다라

Git merge opiton(--squash)

  • 가나다라

Git commit --amend

  • 앞선 장에서도 다뤘다. 해당 커밋을 '수정'하는 것이다. 우리는 보통 commit을 남길때 '어떤 규칙'을 만들어둔다. 예를 들어 접두사에 C,R,U,D등을 붙여 어떤 작업인지 바로 쉽게 체크가 가능하게라던지, 누가 했는지 commit에 그냥 남겨버린다던지 등을 말이다.
  • 그래서 commit에 메시지를 '잘' 남기는 것이 곧 이력 추적을 용이하게 하고, 곧 버전관리의 사소하지만 디테일한 부분이라는 것이다.

Git 취소하기

https://youngest-programming.tistory.com/220

가나다라

Git revert

Git reset

profile
도메인 중심의 개발, 깊이의 가치를 이해하고 “문제 해결” 에 몰두하는 개발자가 되고싶습니다. 그러기 위해 항상 새로운 것에 도전하고 노력하는 개발자가 되고 싶습니다!

0개의 댓글