Preview ng leksyon

병합 충돌: 당황하지 말고 이해하고 해결하기

병합 충돌은 초보자를 두렵게 하지만, 이 섹션을 마치면 침착하게 마주할 수 있을 것입니다. 충돌이 발생하는 이유(깃은 생각을 읽지 못하며, 어떤 변경이 더 중요한지 알지 못합니다)와 충돌 마커를 읽는 방법, 올바른 해결책을 선택하는 방법을 살펴봅니다. 수동 해결과 병합 도구 사용의 두 가지 접근 방식을 소개합니다.

병합 충돌 충돌 마커 충돌 해결
Ano ang matututunan mo sa leksyong ito
  • 병합 충돌의 본질을 이해하고 더 이상 두려워하지 않게 됩니다. 충돌이 예측 가능해집니다.
  • 깃 마커를 올바르게 읽어 수동으로 충돌을 스스로 해결할 수 있습니다.
  • 편집기에서 병합 도구를 설정하여 시각적으로 충돌을 해결하는 방법을 배웁니다.

Simula ng leksyon

병합 충돌의 세 가지 유형

  • 내용 충돌: 동일한 줄의 변경 사항
  • 이름 변경 충돌: 파일이 변경되고 이름이 바뀐 경우
  • 삭제 충돌: 한 브랜치에서 파일이 삭제되고 다른 브랜치에서 변경된 경우
  • Git에게 이름 변경 충돌이 가장 까다롭습니다
  • 의심스러운 충돌이 발생하면 파일 기록을 확인하세요

자, 당신이 중요한 프로젝트에서 작업하고 있는데 갑자기 Git이 충돌을 알린다고 상상해보세요. 해결의 첫 번째 단계는 충돌 유형을 이해하는 것입니다. 내용 충돌은 다른 브랜치에서 동일한 줄의 변경 사항이 발생할 때 발생합니다. 이름 변경 충돌은 더 복잡합니다. 한 개발자가 파일 이름을 바꾸고 동시에 다른 개발자가 파일 내용을 편집할 때 발생합니다. 세 번째 유형은 삭제 충돌로, 한 브랜치에서는 파일이 사라지지만 다른 브랜치에서는 계속 존재할 때 발생합니다. Git이 파일 이름 변경 후 기록을 항상 올바르게 추적하지 못하기 때문에 이름 변경 충돌이 가장 자주 어려움을 유발합니다. 따라서 의심스러운 충돌이 발생하면 항상 파일 변경 기록을 확인하세요.

복잡한 충돌의 구조

  • <<<<<<< 마커는 당신의 변경 사항을 나타냅니다
  • =======는 당신의 버전과 상대방의 버전을 구분합니다
  • >>>>>>>는 충돌 블록의 끝을 표시합니다
  • git status는 모든 문제 파일을 보여줍니다
  • git diff는 변경 사항을 자세히 비교합니다

feature 브랜치를 main에 병합하는 중이고 충돌 메시지를 보았다고 가정해 봅시다. 문제가 있는 파일을 열면 특수 마커가 보일 것입니다. <<<<<<< HEAD와 ======= 사이의 모든 것은 당신의 변경 사항입니다. =======와 >>>>>>> feature 사이의 모든 것은 병합되는 브랜치의 변경 사항입니다. git status를 사용하여 충돌하는 모든 파일을 확인하고 git diff를 사용하여 차이점을 자세히 살펴보세요. 기억하세요: 마커는 오류가 아니라 결정을 내려야 할 위치를 알려주는 힌트입니다.

#!/bin/bash
# conflict_analysis.sh

echo "테스트 저장소 생성"
mkdir conflict-demo && cd conflict-demo
git init

echo "파일 생성 및 main에 첫 번째 커밋"
echo 'Line 1' > file.txt
echo 'Line 2' >> file.txt
git add . && git commit -m 'Initial commit'

echo "feature 브랜치 생성 및 첫 번째 줄 변경"
git checkout -b feature
sed -i 's/Line 1/Line 1 modified in feature/' file.txt
git commit -am 'Modify line 1 in feature'

echo "main으로 돌아와서 동일한 줄 변경"
git checkout main
sed -i 's/Line 1/Line 1 modified in main/' file.txt
git commit -am 'Modify line 1 in main'

echo "브랜치 병합 시도"
git merge feature || echo '충돌!'

echo "\n상태 확인:"
git status --short

echo "\n충돌 파일 표시:"
cat file.txt

충돌 해결 전략

  • 수동 편집: 마커를 제거하고 원하는 내용을 남깁니다
  • GUI 도구: 시각적 비교를 위한 meld, kdiff3
  • --ours/--theirs: 자신의 버전이나 상대방의 버전을 채택합니다
  • Rebase 시 각 커밋에 대해 충돌이 해결됩니다
  • 해결 후 git add와 git commit을 잊지 마세요

충돌이 발견되면 여러 가지 방법이 있습니다. 파일을 수동으로 열어 마커를 제거하고 필요한 코드를 남겨둘 수 있습니다. 시각적 학습자에게는 meld나 kdiff3과 같은 도구가 적합합니다. 이 도구들은 파일의 세 가지 버전을 동시에 보여줍니다. 자신의 변경 사항이 확실하다면 git checkout --ours를 사용하여 자신의 버전을 유지하거나 --theirs를 사용하여 상대방의 버전을 유지하세요. Rebase 시에는 특히 주의해야 합니다. 여기서는 리베이스되는 각 커밋에서 충돌이 발생할 수 있습니다.

#!/bin/bash
# resolve_strategies.sh

echo "방법 1: 수동 해결"
echo '충돌 마커를 제거하여 파일을 편집하세요'
echo '그런 다음 실행: git add file.txt'

echo "\n방법 2: 우리 버전 채택"
git checkout --ours file.txt

echo "\n방법 3: 그들의 버전 채택"
git checkout --theirs file.txt

echo "\n방법 4: 병합 도구 사용"
echo 'git mergetool --tool=meld'

echo "\n방법을 선택한 후 병합 완료:"
echo 'git commit -m "Resolve merge conflict"'

Buong leksyon ay para sa subscription

34 pang slide sa buong bersyon.

Mabubuksan ang video, lahat ng slide, tala, pagsusulit, AI tutor, at interview pagkatapos mag-sign in at mag-subscribe.

Mag-sign in o magparehistro Mag-subscribe

Nilalaman ng leksyon

  1. 병합 충돌의 세 가지 유형
  2. 복잡한 충돌의 구조
  3. 충돌 해결 전략
  4. 예방 및 모범 사례
  5. Git에서 여러 줄 충돌을 읽는 방법
  6. 컨텍스트 마커 해독
  7. 중첩 충돌: 해결 전략
  8. 자동화 및 고급 도구
  9. 선택 전략: HEAD 또는 브랜치?
  10. '최소 놀라움' 원칙
  11. 의미론적 충돌: 보이지 않는 적
  12. 도구 및 자동화
  13. 도구 선택: 언제 무엇을 사용할지
  14. VS Code: 설정 및 고급 기능
  15. Beyond Compare: 복잡한 충돌 시나리오
  16. Git Flow 및 자동화 통합
  17. .gitattributes를 통한 병합 자동화
  18. 나만의 Merge Driver 만들기
  19. Git rerere — 나만의 비서
  20. 고급 자동화 전략
  21. 대규모 팀을 위한 Workflow 설계
  22. 충돌 방지를 위한 코드 리뷰
  23. 장기 Feature 브랜치 작업 전략
  24. 충돌 해결 도구와 자동화
  25. 맹목적 변경 수용의 위험성
  26. 안전한 충돌 해결 전략
  27. 병합 후 테스트: 확인할 사항
  28. CI/CD 통합 및 예방 조치
  29. Rebase 충돌과 Merge 충돌의 차이점
  30. --rebase-merges 사용하기
  31. 연속 충돌 해결 전략
  32. 고급 리베이스 기술과 디버깅
  33. 품질 관리 시스템으로서의 CI/CD
  34. GitHub Actions: 충돌 확인
  35. Danger-JS: 똑똑한 검사 자동화
  36. CI/CD에서의 자동 충돌 해결
  37. 충돌: 당황에서 자신감으로

Mga artikulo tungkol sa araling ito

Lahat ng leksyon ng kurso

  1. 소개: 완전 초보에서 자신 있는 개발자로 성장하기 위한 Git
  2. Git가 왜 필요한가? — 취업에 왜 필수인가
  3. Git 설치 및 설정: 첫 실행을 위한 준비
  4. 첫 번째 저장소: init, add, commit과 인덱스의 마법
  5. 히스토리 읽기: log, diff, show 및 과거 탐색
  6. 브랜치: 코드의 평행 현실
  7. 오류 취소하기: restore, reset, revert — 올바른 방법과 위험한 방법
  8. GitHub 및 원격 저장소: 클라우드에 코드 저장하기
  9. 팀워크: 포크, 기능 브랜치 및 풀 리퀘스트
  10. 병합 충돌: 당황하지 말고 이해하고 해결하기
  11. 실제 팀의 Git 프로세스: 어떤 워크플로우를 선택할까
  12. 고급 도구: 리베이스, 스태시, 체리픽 및 태그
  13. 최종 프로젝트: 실제 팀 개발 시뮬레이션