병합 충돌: 당황하지 말고 이해하고 해결하기
병합 충돌은 초보자를 두렵게 하지만, 이 섹션을 마치면 침착하게 마주할 수 있을 것입니다. 충돌이 발생하는 이유(깃은 생각을 읽지 못하며, 어떤 변경이 더 중요한지 알지 못합니다)와 충돌 마커를 읽는 방법, 올바른 해결책을 선택하는 방법을 살펴봅니다. 수동 해결과 병합 도구 사용의 두 가지 접근 방식을 소개합니다.
- 병합 충돌의 본질을 이해하고 더 이상 두려워하지 않게 됩니다. 충돌이 예측 가능해집니다.
- 깃 마커를 올바르게 읽어 수동으로 충돌을 스스로 해결할 수 있습니다.
- 편집기에서 병합 도구를 설정하여 시각적으로 충돌을 해결하는 방법을 배웁니다.
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-subscribeNilalaman ng leksyon
- 병합 충돌의 세 가지 유형
- 복잡한 충돌의 구조
- 충돌 해결 전략
- 예방 및 모범 사례
- Git에서 여러 줄 충돌을 읽는 방법
- 컨텍스트 마커 해독
- 중첩 충돌: 해결 전략
- 자동화 및 고급 도구
- 선택 전략: HEAD 또는 브랜치?
- '최소 놀라움' 원칙
- 의미론적 충돌: 보이지 않는 적
- 도구 및 자동화
- 도구 선택: 언제 무엇을 사용할지
- VS Code: 설정 및 고급 기능
- Beyond Compare: 복잡한 충돌 시나리오
- Git Flow 및 자동화 통합
- .gitattributes를 통한 병합 자동화
- 나만의 Merge Driver 만들기
- Git rerere — 나만의 비서
- 고급 자동화 전략
- 대규모 팀을 위한 Workflow 설계
- 충돌 방지를 위한 코드 리뷰
- 장기 Feature 브랜치 작업 전략
- 충돌 해결 도구와 자동화
- 맹목적 변경 수용의 위험성
- 안전한 충돌 해결 전략
- 병합 후 테스트: 확인할 사항
- CI/CD 통합 및 예방 조치
- Rebase 충돌과 Merge 충돌의 차이점
- --rebase-merges 사용하기
- 연속 충돌 해결 전략
- 고급 리베이스 기술과 디버깅
- 품질 관리 시스템으로서의 CI/CD
- GitHub Actions: 충돌 확인
- Danger-JS: 똑똑한 검사 자동화
- CI/CD에서의 자동 충돌 해결
- 충돌: 당황에서 자신감으로
Mga artikulo tungkol sa araling ito
- git merge: paano pagsamahin ang mga branch at ayusin ang conflict
- Git at GitHub: ano ang pagkakaiba at paano sila magkaugnay
- Paano mag-install ng Git sa Windows, macOS, at Linux
- Ano ang Git at bakit ito kailangan ng developer
- Git Bash: ano ito at paano gamitin sa Windows
Lahat ng leksyon ng kurso
- 소개: 완전 초보에서 자신 있는 개발자로 성장하기 위한 Git
- Git가 왜 필요한가? — 취업에 왜 필수인가
- Git 설치 및 설정: 첫 실행을 위한 준비
- 첫 번째 저장소: init, add, commit과 인덱스의 마법
- 히스토리 읽기: log, diff, show 및 과거 탐색
- 브랜치: 코드의 평행 현실
- 오류 취소하기: restore, reset, revert — 올바른 방법과 위험한 방법
- GitHub 및 원격 저장소: 클라우드에 코드 저장하기
- 팀워크: 포크, 기능 브랜치 및 풀 리퀘스트
- 병합 충돌: 당황하지 말고 이해하고 해결하기
- 실제 팀의 Git 프로세스: 어떤 워크플로우를 선택할까
- 고급 도구: 리베이스, 스태시, 체리픽 및 태그
- 최종 프로젝트: 실제 팀 개발 시뮬레이션