이전 포스팅에서 reset 과 revert를 다루었다. reset의 경우 깔끔하게 지워버리는 작업이기때문에 문제가 없었지만 revert 과정에서 충돌이 발생하는 것을 찾을수 있었다. 충돌 원인을 해결하는 것은 간편한 툴들이 있어 가능했지만, 그 원인이 궁금했고 revert 충돌에 대해 공부하게 되었다.
우선 설명하기에 앞서 몇가지 파일과 커밋을 준비한다.
(모든 커밋은 동일한 파일에서 진행된다 : a.txt)
1번째 커밋 |
---|
A |
B |
C |
2번째 커밋 |
---|
ABC |
B |
C |
3번째 커밋 |
---|
ABC |
B |
CDE |
4번째 커밋 |
---|
AB |
B |
CDEF |
revert란 해당 커밋을 무시하겠다는 의미다.
즉, 2번째 커밋을 revert한다는 의미는 1번째에서 2번째로 넘어온 커밋을 무시한다! 라는 의미가 되는데 파일 내용의 변경사항을 보자면 'A ⇒ ABC ' 로 수정된 사항을 무시하겠다는 의미가 된다.
3번째 커밋 ⇒ 2번째 커밋 revert 를 살펴보자
해당사항은 2번째 커밋을 무시한 첫번째 커밋으로 돌아가며, 3번째 커밋은 유지하겠다라는 의미가 된다.
3번째 커밋 ⇒ 2번째 커밋 revert |
---|
ABC(두번째 커밋 무시) ⇒ A |
B |
CDE |
이 상황에서는 충돌이 발생하지 않는다. 같은 라인을 건드리는 커밋이 존재하지 않기 때문이다. 그럼 다음 상황을 살펴보자
(우선, reset을 통해 4번째 커밋까지 초기화해준다.)
2번째 커밋을 무시하겠다는 상황은 동일하지만, 4번째 커밋에서 동일한 라인을 건드리는 바람에 'A ⇒ A(1번째 커밋 그대로) | AB (4번째 커밋)' 둘중에 무엇을 선택할 것이냐 라는 부분에서 충돌이 발생하게 된다.
즉, revert의 경우 같은 라인에 수정사항이 생기게 된다면 문제가 되는 것이다.
4번째 커밋 ⇒ 2번째 커밋 revert |
---|
AB ⇒ A ? | AB ? |
B |
CDEF ⇒ 문제 X |