Git 충돌 제거 설명서(git mergetool 사용 방법)

4031 단어 Git

파일 편집 충돌 시


다음은 흔히 볼 수 있는 충돌 화면이다.

여러분은 어떤 방법으로 충돌을 하셨나요?
비록vim와emacs에서 직접 편집하는 사람이 비교적 많지만 실제로 열어보면 다음과 같은 차이가 나타난다고 생각합니다.

이 화면만 보면 어떻게 조작해야 좋을지 모르겠어요.(Objective-C의 ARC/MRC 양측 모두 개발 경험이 있는 사람은 눈을 감으세요...)
git에는 이런 충돌을 지원하는 메르지git mergetool의 지령이 탑재되어 있다.

이렇게 Enter 키를 누르면 아래 화면이 올라갑니다.

화면의 넓이 때문에 글씨체가 비교적 작기 때문에 여기서'메르지의 차별이 나타나기 전의 상태'와'메르지의 차별을 하고 싶다'는 점에 주목해 보겠습니다.

이 두 가지를 비교해 보면 알 수 있듯이 @property의'*adapter'가'*webViewAdapter'로 바뀌었다.
merge의 차분 내용은 사실상 상기 변수 이름의 변경입니다.
따라서'merge 결과로 저장된 파일'에서 충돌하는 곳의 상단(화면 내 HEAD 측)에서 adaper를 웹 뷰어댑터로 덮어씁니다.아래쪽과 충돌 표시를 삭제하는 것을 잊지 마세요.
참고로 git merge에서 충돌하는 상황에서 중간은 branch가 가지를 나눌 때의 상태이고 왼쪽은 현재 branch에 추가된 차, 오른쪽은 merge의 branch에 추가된 차(3-way merge)를 원한다.
따라서 중간과 왼쪽을 비교하면 현재 브랜치가 어떻게 전진하고 있는지 확인할 수 있다.
이번에 ARC에 대응하는 리턴은 스트롱이고 assign은 weak이다.

완료되면 편집기를 저장하고 종료합니다.이전 상태는 해당 파일입니다.orig로 저장합니다.자동git add니까 제출하세요.
※ 또한, 취소 시 1회 저장하지 않고 편집기를 종료합니다.
※ 그나저나 지금은 vim·emacs만 지원하는 설정 방법도 있으니 말을 잘하면 메시지 등을 남겨주세요.

(Xcode용) GUI의 diff 도구가 시작되는 경우


오픈diff를 자주 켜는 것 같습니다. 다음 지령으로vimdiff로 전환해 주십시오.
git config --global merge.tool vimdiff

(번외편)mergetool을 사용하지 않고 유사한 방법으로merge


종교관계로 vim를 사용할 수 없거나 화면이 좁은 사람에게는 좋은 소식이다.
일반적인 충돌 표시라면mergetool 한가운데 있는 화면(merge의 차분이 만들어지기 전의 상태, BASE)은 부족하지만 충돌 표시에 그걸 표시하는 옵션이 있습니다.
git config --global merge.conflictstyle diff3
충돌 표시는 다음과 같습니다.
<<<<<<< HEAD
merge前の状態
||||||| merged common ancestors
mergeしたい差分が作られる直前の状態
=======
mergeしたい差分
>>>>>>> branch
어쨌든 일단 설정해 놔도 손해 안 봐.mergetool처럼 큰 conflict를 사용할 때도 편리하지 않습니다.
※ 단, 충돌이 없는 곳에 추가된 변경 사항을 파악할 수 없기 때문에 큰 차이점은 메르게토올이나 git diff를 조합해서 사용하는 것이 좋습니다.
참조: http://qiita.com/hchbaw/items/1191c2627307a4673b1b

파일 삭제 충돌 시 (path conflict)


삭제된 파일이 편집될 때 발생합니다.
  • Deleted by them:
  • 표시 차이로 삭제
  • 현재 브랜치를 통해 변경
  • Deleted by us:
  • 현재 branch에서 삭제
  • 태그 차이로 변경
  • 대부분의 경우 삭제를 사용하지만,merge 파일이 저장되어 있기 때문에 다음과 같습니다.
    git rm path/to/target/file
    
    ※ unmerged 같은 메시지가 나오지만, 삭제 내용은 잘 반영됩니다.

    동차분을 반복할 때


    git는 충돌 후의 차분을 저장하는merge 결과를 재사용하는rererere 기능이 있습니다.
    mentena와 발매 담당은 같은 차이로 여러 번merge를 할 때 편리합니다.
    다음 명령을 사용할 수 있습니다.
    git config --global rerere.enabled true
    

    좋은 웹페이지 즐겨찾기