Atomic Habits

git3 - Sourcetree branch & conflict (2) 본문

IT/Git

git3 - Sourcetree branch & conflict (2)

체계성 2021. 10. 17. 16:19

git3 - Sourcetree branch & conflict 4.2. 병합 : 서로 다른 파일 병합

목표 : master 브랜치와 새로운 opentutorials 브랜치가 각각 다른 파일(파일명이 다른 파일)을 수정 후 병합하자.

 

1) 마스터 외 기존 브랜치 삭제

 - 마스터에 접속

 - 삭제할 브랜치 우클릭 - Delete 브랜치명 클릭

 - Force delete : 삭제할 브랜치와 병합하지 않아서, 지워질 브랜치의 버전(내용물)이 유실될까봐 묻는 항목 - 강제 삭제

2) 새 브랜치 생성 (opentutorials 브랜치)

3) 마스터 접속 유지 - 파일 생성 및 내용 추가 후 커밋( 메세지 : master work 5 ) 

4) opentutorials 관련 사항

 - opentutorials 브랜치 접속

 - opentutorials.txt 파일 생성 -> opentutorials content 5 내용 추가

    -> statge 올리기 -> 커밋( 메세지 : opentutorials work 5 )

 

 

5) (마스터 브랜치가 베이스가 되도록) opentutorials 브랜치 내용을  마스터 브랜치로 병합하기(합치기)

 - 마스터로 접속(체크아웃)

 - opentutorials 브랜치의 내용을 당겨와서 병합하는 과정 -> 좌측 opentutorials 브랜치 우클릭

   -> Merge opentutorials into current branch 클릭

 

 

6) 병합 결과 확인하기

 - 서로 다른 이름의 파일을 각각 수정한 master, opentutorials의 브랜치의 버전 master work 5, open... work 5가

   병합되어 Merge branch 'opentutorials' 라는 이름의 새 버전이 생겼다.

 - master work 5 의 파일 ( work.txt / maser.txt / .git )

 - opentutorials work 5 의 파일 ( work.txt / opentutorials.txt / .git )

 - Merge branch 'opentutorials' 의 파일 ( work.txt / maser.txt / opentutorials.txt / .git ) 

   -> 마스터가 opentutorials 브랜치를 병합했다는 의미.

 


git3 - Sourcetree branch & conflict 4.3. 병합 : 같은파일, 다른부분 병합

다른 브랜치가 같은 파일 내 [서로 다른 부분] / [서로 같은 부분]을 수정하고 병합했을 때의 차이를 확인하자.

 

1) 임시 삭제 : opentutorials 브랜치 우클릭 -> 브랜치 삭제 ( Force delete 체크 X - 병합했으니 강제삭제 무관 )

2) opentutorials 브랜치 만들기 직전 상태인 master work 4 로 돌아가서 그 이후에 수정된 내용, 파일은 제거(되돌리기)하자.

3) master work 4 버전 우클릭 -> Reset current branch to this commit -> Hard 선택 -> Yes -> 복구 완료

 

4) 

 - work.txt 파일 수정 후 커밋 ( 메세지 : work 5 )

#title

content

 

#title

content

5) opentutorials 브랜치 생성 및 work.txt 파일 수정(하단 부분)

 - work.txt 파일 수정 후 커밋 ( 메세지 : opentutorials work 6 )

#title

content

 

#title

opentutorials content

6) master 접속 후 work.txt 파일 수정(상단 부분)

 - work.txt 파일 수정 후 커밋 ( 메세지 : master work 6 )

#title

master content

 

#title

opentutorials content

7) opentutorials 브랜치 내용을 마스터 브랜치로 병합하자.

 - 서로 다른 브랜치가 같은 파일 내 서로 다른 부분을 수정하고 마스터로 병합한 결과

다른 브랜치가 같은 파일 내 [서로 다른 부분] / [서로 같은 부분]을 수정하고 병합했을 때의 차이를 확인하자.

 


git3 - Sourcetree branch & conflict 4.4. 병합 : 같은파일, 같은부분 병합

다른 브랜치가 같은 파일 내 [서로 다른 부분] / [서로 같은 부분]을 수정하고 병합했을 때의 차이를 확인하자.

1) 사전 작업

 - 접속 중이며 병합된 Master 브랜치에서 work5 로 복구시킨다. -> Hard -> Ok -> Yes

 - oepntutorials 브랜치 접속해서 work5 로 복구시킨다.

 

2) opentutorials 접속 / work.txt 파일 수정 / 커밋 ( 메세지 : opentutorials  work 6 )

 - 기존

#title

content

 

#title

content

 - 수정 후

#title

content

opentutorials

#title

content

 

3) master 접속 / work.txt 파일 수정 / 커밋 ( 메세지 : master work 6 )

 - 기존

#title

content

 

#title

content

 - 수정 후

#title

content

master

#title

content

 

4) 마스터 기준으로 opentutorials 브랜치를 병합하자.

 - 충돌메세지 당연히 뜬다. ( 같은 파일 내 같은 부분을 수정한걸 합치는 과정이므로 )

 - 해당 파일을 찾아서 열어보자. 

<<<<<<<< HEAD : 최근 체크아웃 한 브랜치의 최신 버전( 우리가 작업한 게 이거야 ) 

master 

=====

opentutorials 

>>>>>>>>> opentutorials  : opentutorials 브랜치에서는 ======= 아래에 'opentutorials' 라는 내용을 작업했다.

 

5) 충돌 해결하기 

 (1) 방법1

  - 좌측 최하단(스테이지에 올라가지 않은 파일) 우클릭 -> Resolve Conflicts(충돌 해결하기) -> 

   -> Resolve Using 'Mine' : 해당 파일에서 HEAD 의 내용만 남긴다. ( <<< 부터 === 까지 )

                                     현재 접속 중 갑 브랜치 버전 우선

   -> Resolve Using 'Theirs' : 해당 파일에서 opentutorials 브랜치의 내용만 남긴다. ( === 부터 >>> 까지 )

                                     병합 당하는 비접속 중 브랜치 버전 우선

 (2) 방법2 - ( 수동으로 코드 편집 후 Mark Resolved 클릭)

   1) 해당 파일을 직접 열어 수동으로 남길 코드만 남기고 그외 부분은 제거한다. ( <<< === >>> )

   2) 좌측 최하단(스테이지에 올라가지 않은 파일) 우클릭 -> Resolve Conflicts(충돌 해결하기)

         -> Mark Resolved ('해결' 표시 ) -> Ok -> 자동으로 스테이지에 올라감 

 

   3) 수동 편집 후 Ok -> 자동으로 스테이지에 올라감 -> 해당 파일 클릭 -> (-, +) 내용 확인

        -> 커밋( 메세지 : 어느 파일에서 충돌 발생했는지 자동 명시됨 ) 

 

   4) 충돌 해결 결과

 

Comments