생활코딩

Coding Everybody

코스 전체목록

닫기

branch 병합 시 충돌해결

수업내용

여기서는 branch를 병합 할 때 git이 자동으로 처리해주는 소중한 작업이 무엇인가를 소개하고, 자동으로 병합할 수 없는 경우에는 어떻게 이를 수동으로 처리해야 하는지를 소개해드립니다. 

수업

수업내용

충돌이 일어났을 때 

충돌이 생기면 아래와 같은 메시지가 뜹니다. 

git status를 하면 충돌이 일어난 파일을 찾을 수 있습니다. 

 충돌이 발생한 파일을 수정합니다. 아래와 같습니다. 

'<<<<<<< HEAD' 부터 '=======' 사이의 구간이 현재 체크 아웃된 파일의 내용이고 '=======' 부터 '>>>>>>> exp' 사시의 구간이 병합하려는 대상인 exp 브랜치의 코드 내용입니다.  이 정보를 참고로해서 두개의 코드를 병합한 후에 특수기호들을 제거해주시면 됩니다. 작업이 끝나면 파일을 저장.

충돌 작업을 끝냈다는 것을 깃에게 알려줍니다. 

git add 'conflicted file name'

 

댓글

댓글 본문
작성자
비밀번호
  1. 김수현
    [ 충돌 예방법 ]
    https://opentutorials.org......091 <-- SourceTree를 사용하여 Git 사용하는 방법 강의

    어차피 병합되는(병합당하는) 브랜치(예:exp브랜치)에서
    병합하는 브랜치(예:master브랜치)의 변화를 자주 병합하여 가져온다.
    (그러면 작은 충돌이 발생한다)
    그런데... 6개월쯤 긴 기간동안 한번도 병합을 해주지않다가 병합하면...
    (큰 충돌이 발생하고...해결하기 곤란해진다)

    병합당하는 브랜치에서 병합하는 브랜치의 내용을 자주 병합하여 가져오고
    그러면서 작업을 해야 한다.
  2. 김수현
    깃이 얼마나 많은 부분을 자동화해주는가? 기특하다
    git branch exp
    git branch -d exp
    다시 만들어야 겠음
    합치지 않았는데 정말 지울 거냐?
    그러면 강제로 지워야 함
    git branch -D exp(55)
    git branch exp
    vim master.txt라는 파일을 만듬
    내용을 a라고 할 것임
    git add master.txt
    git commit -m "6"
    git checkout exp
    vim exp.txt > 내용은 a
    git add exp.txt
    git commit -m "7"
    git checkout exp
    vim common.txt
    파일안의 내용 변경 (exp)
    같은 곳을 변경... 뭔가 문제가 심각해짐
    같은 부분을 수정하고 병합하면 에러남
    그리고 커밋 12
    git checkout master
    git merge exp
    컨프릭트 에러남
    git status
    언 머지드 패스라도 나옴
    커먼.txt가 양쪽에서 바뀜 나옴
    vim common.txt
    그러면 새로운 내용이 나옴
    기호를 해석할 수 있는 능력이 있어야 함
    ============
    여러분에게 충돌해결을 위임한 것임
    동시에 가지고 있는 것으로 하고
    다른 것은 삭제함
    git add common.txt
    git status
    git commit
    :wq
    git log
    vim common.txt
    컨플릭트가 나면 이런식으로 처리하면 됨


    위 내용을 정리하면...
    common.txt <---mater와 exp에서 같은 부분을 고쳤음(다른 내용으로)
    그리고 머지를 하면 ... 고친부분(같은 부분이지만 다르게 고쳐서)에서 컨프릭에러가 남
    그 에러난 파일에 vim common.txt로 들어가면...
    ===============(이와 같은 선을 기준으로 위, 아래로 같은 부분에서 다르게 처리한 부분이 나옴(위에 있는 그림 참조))
    그러면 그 부분을 삭제할 것은 삭제하고 남길 것은 남기고 적절히 해결해서 수정한 후에
    '애드 파일명'(<--- 컨플릭트를 처리했다고 알려주는 것임)와 커밋(커밋 이름 주지 않고)함 >에디터 안에 들어가면 (병합처리 완료했다라는)메시지 나옴 > :wq > 문제 해결됨

    더 간단히 설명하면
    컨플릭트가 난 파일을 ---> 파일편집기를 사용하여 컨플릭트문제 수정 --->
    add 파일명(문제해결했다고 알리는 것임)하고 --> 커밋 ===> 문제해결됨
    https://www.slideshare.net......752 <--42P참조
  3. groundntree
    * 브랜치 만들기
    git branch -b exp
    git branch

    << 충돌이 발생하지 않는 경우의 병합 실습 >>

    1. 서로 다른 파일을 작업하는 경우
    * master 브랜치에서 master.txt 생성후 커밋
    git checkout master
    vim master.txt
    git add master.txt
    git commit -m "6"

    * exp 브랜치에서 exp.txt 생성후 커밋
    git checkout exp
    vim exp.txt
    git add exp.txt
    git commit -m "7"

    * 병합
    git checkout master
    git merge exp
    git log --branches --graph --decorate
    ls -al

    2. 같은 파일의 다른 부분을 추가할 경우

    * exp 브랜치에서 common.txt 에 function a() {} 를 만드세요.
    git checkout exp
    vim common.txt
    git add common.txt
    git commit -m "8"

    * master 브랜치에서 common.txt 에 function b() {} 를 만드세요.
    git checkout master
    git merge exp
    ls -al
    vim common.txt
    git commit -am '9'

    * exp 브랜치에서 common.txt 에 function c() {} 를 만드세요.
    git checkout exp
    vim common.txt
    git commit -am "10"

    * master 브랜치에서 exp 브랜치를 병합합니다.
    git checkout master
    git merge exp
    ls -al
    vim common.txt
    cat common.txt

    * exp 브랜치에서 master 브랜치를 병합합니다.
    git checkout exp
    cat common.txt
    git merge master
    cat common.txt

    << 충돌이 발생할 경우의 실습 >>

    * master 브랜치에서 common.txt 의 function b(master)로 수정 후 커밋
    git checkout master
    vim common.txt
    git commit -am '11'

    * exp 브랜치에서 common.txt 의 function b(exp)로 수정 후 커밋
    git checkout exp
    vim common.txt
    git commit -am '12'

    * master 브랜치에서 exp 브랜치를 병합하면 충돌이 발생합니다.
    git checkout master
    git merge exp
    git status

    * 충돌이 발생한 파일을 다시 수정하여 커밋합니다.
    vim common.txt
    git add common.txt
    git status
    git commit
    git log
    cat common.txt
  4. seulcode
    항상 좋은 수업 감사드립니다. 깃의 세계에 빠져들고 있네요...

    아래쪽 텍스트 에서 >>>>exp' 사시의 -> 사이의 오타인것 같습니다!
    항상 감사드립니다 이고잉님... 나중에 저도 오픈소스로 보은하겠습니다.
버전 관리
egoing
현재 버전
선택 버전
graphittie 자세히 보기