Written by
Poogle
on
on
2021.08.11 TIL
새롭게 배운 것 Done
운동
- 저녁 러닝 3km
독서
알고리즘
코딩
Git - Rebase
- 상황 - rebase merge 후 동일 브랜치로 새로운 PR 보냈을 때 이전 커밋 이력이 남는 경우
1) sh 브랜치
에서 만든 sh_working 브랜치
로 커밋을 쌓고 push
2) 커밋한 내용을 PR 보내고 머지 옵션 중 Rebase and merge로 머지
3) sh 브랜치
를 git pull
하면 리베이스 후 머지를 했기 때문에 같은 내용 다른 커밋이 생김
- Rebase는 기존의 커밋을 그대로 사용하는 것이 아니라 내용은 같지만 다른 커밋을 새로 만든다.
4) sh_working
브랜치로 switch하고 새로운 커밋을 함
4-1) push까지 하고
5) d, e, f 파일을 만든 것에 대한 PR을 sh_working
브랜치에서 sh
브랜치로 보내려고 하면
- 마치 이전 파일 커밋들이 머지가 되지 않은 것처럼 이력에 나타난다. 이유는 rebase 이후 커밋 아이디가 달라졌는데 이를 반영해주지 않고 해당 브랜치에서 작업을 이어나갔기 때문이다.
❓ 이전 커밋들을 누적해서 보여주지 않도록 하려면?
⏩ 두 가지 방법을 소개한다.
- 이후 PR에서 이전 커밋들이 보이지 않는 것을 확인하기 위해 우선 a ~ e 파일들에 대한 새로운 PR을 rebase and merge한다.
git switch sh
후git pull origin sh
- rebase 후 merge를 했기 때문에 여전히 아까처럼 같은 내용 다른 커밋들이 생긴다.
1-1. git switch sh_working
sh_working 브랜치로 switch한 후 git rebase sh
으로 HEAD가 sh_working 브랜치를 가리키도록 변경
1-2. 새로운 커밋을 쌓고
1-3. git push origin sh_working
을 하면 reject가 발생
- 현재 origin/sh_working 브랜치가 갈라져서 다른 곳에 있기 때문!
1-4. git push --force sh_working
을 해주면
- 이렇게 rebase로 변경된 커밋 아이디들 위로 합쳐져서 쌓여가는걸 볼 수 있다.
- 새로 PR을 보낼 때도 이전 commit은 보이지 않는다!
- 그치만 여럿이 작업하는 환경에서 push force는 어쩐지 위험한 느낌이 들기 때문에 다른 방법을 사용할 수도 있다.
2-1. 동일한 환경에서 진행하기 위해 g, h, i 커밋들을 생성한 PR을 rebase and merge로 merge한 후 git switch sh
, git pull origin sh
- 역시 rebase and merge를 했기 때문에 같은 내용의 다른 커밋들로 브랜치가 나눠진다. 그런데 사실 이미 merge를 했기 때문에 sh_working 브랜치는 없애고 새로 만들어도 된다.
2-2. git branch -D sh_working
으로 로컬 브랜치를 지우고 원격 브랜치도 지워준다.
- merge 된 후 git에서 지워도 되고,
git push origin :sh_working
명령어로 지울 수 있다.
- 확인해보면 예쁜 로그를 볼 수 있다. 이제 현재 상태의 sh 브랜치에서 sh_working 브랜치를 새로 만들고 PR을 보내면
- 깔끔하게 나오는 이후 커밋들을 확인 할 수 있다.
MySQL - 쿼리들
CASE WHEN
- 필드 값 변환 위해 사용 가능
CASE WHEN 조건1 THEN 값1 WHEN 조건2 THEN 값2 ELSE 값3 END 필드이름
- 예제
SELECT channel_id, CASE WHEN channel_id in (1, 5, 6) THEN 'Social-Media' WHEN channel_id in (2, 4) THEN 'Search-Engine' ELSE 'Something-Else' END channel_type FROM prod.session;
COUNT
|value| |-| |NULL| |1| |1| |0| |0| |4| |3|
- ❓
SELECT COUNT(1) FROM prod.count_test
-> 7 - ❓
SELECT COUNT(0) FROM prod.count_test
-> 7 - ❓
SELECT COUNT(NULL) FROM prod.count_test
-> 0COUNT(NULL)
일 때는 세지 않음
- ❓
SELECT COUNT(value) FROM prod.count_test
-> 6- NULL 빼고
- ❓
SELECT COUNT(DISTINCT value) FROM prod.count_test
-> 4- DISTINCT 때문에 NULL 제외
ORDER BY
- ASC -> NULL 처음
- DESC -> NULL 마지막
Type Casting
- 1/2
- 정수끼리 나눗셈 -> 0
- 둘 중 하나를 float으로 캐스팅해야 0.5
cast(category as float)
SELECT cast('100.0' as float)
convert(expression, float)
SELECT convert('100.0', float)
깨달은 점 FEELING
- 팀원의 git 관련 질문을 듣고 내가 Rebase를 잘 모르고 쓰고 있다는 생각이 들었다. 겸사겸사 정리할 겸 해결 내용을 TIL에 적고 이번 주 - 다음 주 내로 Git 공부를 정리해서 포스트를 작성해야겠다. 주 1회 정도는 리뷰를 받을 만한 블로그 포스팅을 작성하는 것이 좋을 것 같다.