Git 실전 · 리베이스와 충돌 · 퀴즈
퀴즈: 리베이스와 충돌
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
리베이스하면 커밋 해시가 바뀌는 이유는?
- Git 이 리베이스 때마다 타임스탬프를 갱신해서
- 리베이스가 커밋을 압축해서
- 커밋 객체 안에 부모 해시가 들어 있어서 부모가 달라지면 해시가 반드시 달라지기 때문
- 브랜치 이름이 해시 계산에 들어가서
리베이스 황금률의 가장 정확한 형태는?
- 이미 푸시한 커밋은 절대 리베이스하지 않는다
- 다른 사람의 작업이 그 위에 쌓여 있는 커밋은 재작성하지 않는다
- 머지 커밋이 있는 브랜치는 리베이스하지 않는다
- main 브랜치는 절대 리베이스하지 않는다
같은 충돌이 리베이스에서 여러 번 반복되는 이유는?
- 리베이스가 커밋을 하나씩 다시 적용하며 매번 삼자 병합을 하므로 N번의 병합이기 때문
- Git 이 한 번 푼 충돌 해법을 캐시해 두지 않기 때문
- 인덱스가 매번 초기화되기 때문
- 리베이스가 공통 조상을 찾지 못하기 때문
`--force-with-lease` 에도 남아 있는 구멍은?
- 태그는 검사하지 않는다
- 서버 쪽이 shallow clone 이면 검사가 통째로 무시된다
- IDE 가 방금 fetch 했다면 원격 추적 참조가 이미 갱신돼 내가 보지 못한 커밋이 있어도 검사를 통과한다
- 브랜치 이름이 바뀌면 항상 실패한다
`merge.conflictStyle zdiff3` 를 권하는 이유는?
- 충돌 표식이 짧아져서
- 겹치지 않는 충돌을 자동으로 해결해 주기 때문
- 리베이스 속도가 빨라지기 때문
- 상대가 무엇을 바꿨는지가 아니라 둘 다 무엇에서 출발했는지를 보여 주기 때문
대화형 리베이스에서 '합치되 그 커밋의 메시지는 버리는' 동사는?
- squash
- reword
- edit
- fixup