[Git] revert 충돌

이리·2024년 5월 21일
0

git

목록 보기
2/2
post-thumbnail

이전 포스팅에서 reset 과 revert를 다루었다. reset의 경우 깔끔하게 지워버리는 작업이기때문에 문제가 없었지만 revert 과정에서 충돌이 발생하는 것을 찾을수 있었다. 충돌 원인을 해결하는 것은 간편한 툴들이 있어 가능했지만, 그 원인이 궁금했고 revert 충돌에 대해 공부하게 되었다.


revert 충돌

준비물

우선 설명하기에 앞서 몇가지 파일과 커밋을 준비한다.
(모든 커밋은 동일한 파일에서 진행된다 : a.txt)


1번째 커밋
A
B
C

2번째 커밋
ABC
B
C

3번째 커밋
ABC
B
CDE

4번째 커밋
AB
B
CDEF

3번째 커밋 ⇒ 2번째 커밋 revert

revert란 해당 커밋을 무시하겠다는 의미다.

즉, 2번째 커밋을 revert한다는 의미는 1번째에서 2번째로 넘어온 커밋을 무시한다! 라는 의미가 되는데 파일 내용의 변경사항을 보자면 'A ⇒ ABC ' 로 수정된 사항을 무시하겠다는 의미가 된다.

3번째 커밋 ⇒ 2번째 커밋 revert 를 살펴보자
해당사항은 2번째 커밋을 무시한 첫번째 커밋으로 돌아가며, 3번째 커밋은 유지하겠다라는 의미가 된다.

3번째 커밋 ⇒ 2번째 커밋 revert
ABC(두번째 커밋 무시) ⇒ A
B
CDE

이 상황에서는 충돌이 발생하지 않는다. 같은 라인을 건드리는 커밋이 존재하지 않기 때문이다. 그럼 다음 상황을 살펴보자

4번째 커밋 ⇒ 2번째 커밋 revert

(우선, reset을 통해 4번째 커밋까지 초기화해준다.)
2번째 커밋을 무시하겠다는 상황은 동일하지만, 4번째 커밋에서 동일한 라인을 건드리는 바람에 'A ⇒ A(1번째 커밋 그대로) | AB (4번째 커밋)' 둘중에 무엇을 선택할 것이냐 라는 부분에서 충돌이 발생하게 된다.

즉, revert의 경우 같은 라인에 수정사항이 생기게 된다면 문제가 되는 것이다.

4번째 커밋 ⇒ 2번째 커밋 revert
AB ⇒ A ? | AB ?
B
CDEF ⇒ 문제 X

revert의 경우 특정 커밋을 무시하는 새로운 버전을 생성해준다는 장점이 있지만 충돌상황을 예측해야한다는 점에서 어려움이 존재하는것같다..
profile
Bonjour!

0개의 댓글