본문 바로가기

부스트캠프 AI Tech 3기/이론 : U-stage

[Day36] Github 특강 1-7 Git 충돌(conflict) 해결 과정 : 머지(Merge) (VSCode)

Pull을 할 때

  • 내 코드와 비교해서 추가된 부분은 문제없이 추가된다.
  • 내 코드에서 처음으로 더 추가된 부분도 문제없이 추가된다.
  • 같은 라인에서 다른 변화가 Pull의 내용과 내 commit내용에 있을 때 충돌이 일어난다.

Current Change는 내 commit내용(R4)

L4는 Pull해서 들어오게 된 내용(L4)

 

이다.

  • Accept Current Change : 내 commit내용으로 바꾸겠다
    -> R4
  • Accept Incomming Change : Pull로 들어오게 된 내용으로 바꾸겠다
    -> L4
  • Accept Both Changes : 양 쪽 내용을 모두 쓰겠다
    ->R4 L4
  • Compare changes : 비교해보겠다
    아래와 같이 비교하는 창을 띄워준다.

 

Mergetool이라는 것을 다운받아서 해결할 수도 있다.

 

1. Accept로 시작하는 셋 중 하나를 고르고 저장한다.

2. Commit

머지 메세지가 적혀있는대로 merge하기 위해서 변경사항병합에서 +을 눌러 스테이징 시킨 후

Commit(+)을 누른다.

3. Push

3-way Merge

두 사용자 u1,u2가 동시에 같은 줄을 수정한다고 하자

 

두 사용자의 코드의 공통의 조상 base를 기준으로 비교해서 conflict인지 아닌지를 판별한다.

 

  1. 변경 사항이 없을 때
    base랑 두 사용자의 변경 내용c1 ,c2이 같으면 (base=c1,base=c2)이면 그대로 conflict없이 지나가고 u1,u2의 코드에 그대로 c1,c2를 유지한다
  2. 한 쪽만 수정했을 때
    한 사용자만 c1로 수정하면 base!=c1, base=c2이기 때문에 c1의 코드로 push된다.
  3. 두 사용자 모두 같은 줄에 다른 내용으로 수정했을 때
    base!=c1, base!=c2, c1!=c2
    ->conflict를 만들어서 사용자가 수정하게끔 한다.