Ladder
라는 클래스에서 사다리를 만들기 위해 createLadder
메서드를 만드는 경우가 있다. 이미 Ladder라는 클래스 내부에 있어서 의미가 중복되기 때문에 이 경우 create
로만 적어도 충분하다는 피드백이 있었다. sammy
의 말씀 중에서 왜 인터페이스를 사용해야 하는지에 대한 느낌이 온다는 부분도 느끼는 점이 있었다. 자주 변경될 것 같은 포인트를 강하게 결합하지 말고 다양한 방법으로 결합도를 낮추는 것을 고민해야겠다. Jay
와 Jun
이 발표하신 내용을 들었습니다. 한 번 더 정리할 수 있는 좋은 기회였습니다. 추가로 운영체제 강의를 듣고 공룡책을 적극적으로 참고하면서 보충해나가려고 합니다. 연습문제도 솔루션을 구해서 간단하게 풀어보면 좋을 것 같습니다. 나는 PR이 통과되어 merge가 되기 전에 미션 3을 진행하였다. 그러다 merge가 되고 fetch를 해보니 아래와 같았다.
현재 HEAD와 upstream 사이에 미션2의 커밋도 껴있는 것을 확인할 수 있다. (사실 왜 껴있는지는 확실히 모른다.. 아마 mission2에서 mission3를 만들었기 때문에 그런거라고 짐작은 하고 있다. 확실히 아시는 분이 있다면 댓글을 남겨주세요 !!)
이 상황에서 rebase를 하게 되면, 미션 2의 커밋을 현재 내 미션 3 브랜치에 적용하려고 하기 시작한다. 그러면 미션 2에서 했던 파일과 미션 3의 내용이 충돌이 있다면 conflict가 당연히 발생한다.
이 모든 conflict를 모두 해결하기가 귀찮아서, 다양한 방법이 있겠지만 git rebase --skip
을 활용했다.
mission3을 만든 시점까지 모든 커밋을 건너뛰었다.
그럼 자연스럽게 사진의 4bbc06c 부터 rebase가 완료된다.
이제 내 원격저장소에 반영하기 위해 git push --force origin mission3
를 한다. push --force
를 하는 이유는 rebase를 하면서 커밋의 해쉬값이 바뀌었기 때문이다.
push가 완료되면 아래와 같아진다. upstream의 입장에서는 현재 자신의 상태위에 mission3가 올라간 상태이므로 base가 동일해서 conflict이 발생할 이유가 없다. PR 보낼 때도 이상이 없다.
관련하여 아래와 같은 좋은 글들을 발견해서 참고하였다.
git rebase를 이해하기
[git] merge, squash & merge 그리고 rebase의 원리에 대해서 알아보자