[Git] Pull Request를 보내기 전에, Rebase를 해야 할까요 혹은 merge commit을 만들어야 할까요?

Rebase vs Merge commit

목적: PR을 보내기 전에 내가 보낼 브랜치가 master와 fast-forward(컨플릭트 없이 바로 머지될 수 있는 상태)상태가 되도록 만든다.

그런데 매번 이렇게 할 필요는 없고,
1. PR을 보낼 브랜치가 master보다 너무 옛날 상태일때나
2. GitHub에서 PR을 보냈더니 ‘merge conflict warning’이 페이지에서 보일 때 (같은 코드가 고쳐졌을때 자동으로 보임)
만 하면 된다.

방법 1. (내 브랜치에 먼저 머지 후 풀리퀘)

  • master의 최신 상태를 내 브랜치에 merge시킨다.
  • master와 내가 똑같은 파일을 고쳤다면 conflict가 날 것이다. 그럼 해결한다.
  • 해결해서 만들어진 merge commit을 push한다 (merge commit이 새로 하나 생김)
  • 장점: 한 번의 ‘merge’만으로 쉽게 해결할 수 있다.
  • 단점: merge commit이 생겨서 깔끔하지 않다. 코드 수정한 의미있는 커밋만 보고싶을텐데 말이다.

방법 2. (리베이스 후 풀리퀘)

  • master의 최신 상태를 base로 해서 내 브랜치를 rebase한다.
  • rebase의 원리는, 내가 원하는 커밋을 base로 해서 내 브랜치가 마치 그 커밋에서 딴 것처럼 기록을 조작하는 것이다.
  • 내부에서 돌아가는 방식은, 내가 원래 딴 커밋에서부터 내가 목표하는 base커밋까지 하나씩 옮겨가면서 새로 커밋을 하는것이다.
(원래상태)

[3시커밋 --- 4시커밋 --- 5시커밋] 
  ㄴ--- 내브랜치커밋

(5시커밋을 베이스로 리베이스를 실행한다)
[3시커밋 --- 4시커밋 --- 5시커밋] 
              ㄴ--- 내브랜치커밋 // 한 커밋씩 옮겨가며 commit한다. 컨플릭이 나면 고쳐준다.

(Continue rebase를 누른다)
[3시커밋 --- 4시커밋 --- 5시커밋] 
                        ㄴ--- 내브랜치커밋 // 목표하는 5시커밋까지 왔다. 컨플릭이 나면 고쳐준다

  • 모두 완료되었으니 push를 해야하는데, 히스토리를 조작하는 위험한 작업이므로 force옵션을 넣어 push해야한다.
  • 결과: 내브랜치커밋이 master의 최신 상태인 5시커밋에서 딴 것처럼 히스토리가 조작된다. 그래서 내 브랜치에서 master로 Pull Request를 보냈을 때 fast-forward(컨플릭트 없이 바로 머지할 수 있는) 상태가 된다.
  • 장점: merge commit없이 깔끔한 커밋 히스토리를 만들 수 있다.
  • 단점: 만약 중간에 코드 컨플릭트가 나면 그 사이에 있는 커밋들 모두에서 컨플릭트를 수정해줘야 할 수 있다. 귀찮다.

언제 무엇을 써야하나?

  • Type 0. master에서 딴지 그리 오래 되지 않은 브랜치: 그냥 PR을 보내본다. conflict warning이 보이면 그 때 2번이나 3번 방법을 쓴다
  • Type 1. 내 브랜치에 커밋이 엄청 많다. 그리고 master랑 비슷한 코드를 만져서 컨플릭트가 날 가능성이 높다: 방법 1(내 브랜치에 먼저 머지 후 풀리퀘)을 사용한다.
  • Type 2. 내 브랜치에 커밋이 그리 많진 않다. 깔끔한 커밋 히스토리를 남기고 싶다(오픈소스 등): 방법 2(rebase)를 사용한다.

ZEPL(Apache Zeppelin) 노트북 Ultimate Chart Parameter별 안내

Screen Shot 2018-10-07 at 8.10.16 PM

 

Chart name Category Option
Ultimate line chart
Charts
line(shared)
dashed(shared)
step(shared)
no-group
Available Columns
xAxis
yAxis
Category
Parameters
bulletType
bulletSize
hideBulletsCount
yAxisValueFormat
yAxisValuePrecision
yAxisValueInside
showXAxisScroll
showYAxisScroll
chartMarginLeft
chartMarginRight
showLegend
legendValueText
legendPosition
xAxisPosition
yAxisPosition
rotateXAxisLabel
rotateYAxisLabel
balloonText
balloonType
yAxisGuides
trendLines
mainTitle
subTitle
xAxisName
yAxisName
xAxisUnit
yAxisUnit
logarithmicYAxis
inverted
graphType
dateFormat
dashLength

취향 알아가기

취향을 찾으면 인생이 한껏 더 풍요로워진다.

글로서 make it clear 하게 해볼까

음악

(호)

  • 멜로디가 있는 자유로운 재즈
  • 데카당 – A
  • 클래지콰이
  • 단편선과 선원들 동행 9분 13초의 라이브
  • 3호선버터플라이의 톤 스튜디오 라이브
  • 금능에서 들은 검정치마의 Everything
  • 브루노마스의 귀여운 그루브의 뮤직비디오들
  • Khruangbin의 50분짜리 피치포크 라이브 영상
  • Wouter Hamel의 노래를 breezy한 날씨에 듣기

(불호)

  • 즉흥 재즈
  • 기승전결이 명확한 노래 (e.g. 윤종신, 백지영의 노래)
  • 나는 순수하고 귀엽고 유니크하다는 자기애 넘치는 노래 (e.g. 악동뮤지션의 노래)

시간을 보내는 방법

(호)

  • 맛있는 곳을 찾아 홀로 밥 먹기
  • 보드게임
  • 격한 물놀이(서핑, 스쿠버다이빙)

날씨와 풍경

(호)

  • 더운 날씨에 민소매 입기
  • 사람 없는 바다
  • 파란 시간에 음악들으며 걷기
  • 탁 트인 장소(옥상, 바다)에서 노을 보기. 옆에 있는 사람을 조심해야 한다 사랑에 빠지므로.

(불호)

  • 시티뷰, 야경

여행 스타일

(호)

  • 대중교통 없이 걷고 걷는 여행. 걷기 좋은 도로
  • 뚜렷한 액티비티의 목적: 서핑 / 스쿠버다이빙
  • 바다 보며 코딩
  • 지나가다 보이는 로컬식당 구글맵 정보 한 번 스캐닝하고 들어가기
  • 돈 적게 쓰기

(불호)

  • 사람이 많은 장소
  • 진부한 디자인/컨셉
  • 이동 시간이 긴 것
  • 돈을 많이 쓰는 것
  • 로컬음식이 아닌 것을 먹기

(호)

  • 천명관, 고래
  • 니코스 카잔차키스, 그리스인 조르바
  • 김훈, 남한산성 (아 내가 좋아하는 책 다 마초가 써서 짜증)
  • 김소연, 마음산책

만화책

(호)

  • 20세기 소년
  • 엔젤전설 / 클레이모어

영화

(호)

  • 톰 크루즈가 나오는 영화 (e.g. 바닐라 스카이, 제리 맥과이어, 마이너리티 리포트)
  • 잭 블랙이 나오는 영화 (e.g. 테네이셔스 디, 스쿨 오브 락)
  • 주성치가 나오는 영화 (e.g. 선리기연, 당백호점추향, 파괴지왕)

(불호)

  • 박찬욱 감독 영화를 뺀 대부분의 한국 영화
  • 세 얼간이

음료

(호)

  • 루이보스 티
  • 아이스 라떼
  • 맥주
  • 사케, 고량주, 청주
  • 산미가 약하고 진한 아메리카노

(불호)

  • 와인 (알고싶지만 모르겠음)
  • 쓴 홍차
  • 봄베이 사파이어, 단 칵테일

여행지

(호)

  • 제주도 협재의 조용한 만화 게스트하우스와 바다
  • 치앙마이의 걷기 좋은 거리
  • 발리 아야나 리조트와 서핑
  • 로컬 바에서 칵테일 이것저것 시켜먹기
  • 내 든든한 여행메이트와 함께 간 미국여행

(불호)

  • 지나다닐때 뚫어져라 쳐다보던 세부 거리
  • 한인들이 많았던 사이판
  • 차가 막히고 어지럽고 다 똑같은 물품을 파는 발리 스미냑과 쿠타