Git에서 강제 덮어쓰기로 병합

Abdul Jabbar 2022년8월23일
Git에서 강제 덮어쓰기로 병합

대부분의 경우 git pushgit merge를 적용하면 결국 충돌이 발생합니다. 어떤 경우에는 병합 충돌에 대한 솔루션이 로컬 변경 사항이나 원격 또는 기타 분기 변경 사항을 버리는 것만큼 간단합니다.

Git이 충돌하는 두 변경 사항을 병합하는 방법을 알아낼 수 없으면 충돌 요청을 생성합니다. 충돌 요청은 문제를 설명하는 특별한 종류의 패치이며 충돌하는 변경(우리와 그들의 것)과 병합 시도의 결과를 모두 포함합니다.

두 팀 구성원이 동일한 파일을 작업하는 동안 해당 파일에서 충돌이 발생하면 Git은 충돌을 작업 파일에 적용합니다. 그런 다음 결과 파일을 편집할 수 있으며 Git은 변경 사항을 기록합니다. 충돌하는 변경 사항이 발생하면 Git은 파일을 충돌 상태로 표시합니다. 특정 분기에서 충돌을 해결하기 위한 몇 가지 명령이 있습니다.

충돌은 두 명 이상의 사용자가 동일한 저장소의 동일한 파일에 대해 작업할 때 가장 일반적입니다. 그러나 파일에서 충돌이 발견되면 Git은 이를 아주 멋진 방식으로 해결하는 방법에 대해 매우 영리하고 지능적입니다. Git은 충돌 마커를 사용하여 파일의 어느 부분이 충돌하는지 보여줍니다. 충돌 마커는 파일의 충돌 섹션 양쪽에 배치된 작은 해시입니다.

pull은 단독으로 사용되지 않습니다. 원격 서버에서 데이터를 가져온 다음 로컬 저장소의 변경 사항과 병합을 적용하는 데 사용됩니다. 우리가 원한다면 아래에 언급된 이 두 가지 작업을 실행할 수 있습니다.

git fetch
git merge origin/$CURRENT_BRANCH

위에서 언급한 origin/$CURRENT_BRANCH는 아래를 의미합니다.

  • Git은 병합 옵션을 적용하고 원격 저장소, 즉 origin의 변경 사항을 적용합니다.
  • 그리고 $CURRENT_BRANCH에 추가됩니다.
  • 현재 로컬 체크 아웃 지점에 존재하지 않는 것

git pullgit fetch 다음에 git merge만 실행하는 것이 좋습니다. 우리는 세 번의 병합을 수행할 것이며, 이를 통해 Git은 세 번의 가져오기 작업을 실행할 것입니다. 여기서 하나의 가져오기만 있으면 됩니다.

git fetch origin   # it will update all our origin/* remote-tracking branches
git checkout new branch        
git merge origin/new branch     
git checkout master
git merge origin/master
git merge -X theirs new branch  
git push origin master   

위에서 언급한 명령은 병합하려는 분기에서 다른 모든 변경 사항을 효과적으로 무시하고 커밋이 모두 병합되는 병합 대상 분기에서 새 커밋을 개발합니다.

또한 일반 병합에서 --ours를 사용하여 병합하려는 분기의 모든 변경 사항을 병합한 다음 병합하려는 분기에 존재하는 모든 파일을 건너뛸 수 있어 둘 사이의 3방향 병합을 효과적으로 수행할 수 있습니다. 분기한 다음 병합하려는 분기의 파일만 사용합니다.

git merge --ours를 사용하여 파일을 병합한 다음 git rebase -i를 사용하여 병합 중인 분기의 변경 사항을 수동으로 다시 적용하는 것이 훨씬 더 쉽다는 것을 알았습니다.

위의 명령은 충돌이 있는 파일에서 작동하지 않지만 충돌을 해결하려면 다음이 작동한다는 것을 알았습니다.

git checkout file_with_conflict
git merge --ours --no-commit file_from_branch_with_conflict
git reset --hard git add file_with_conflict git commit -m 
작가: Abdul Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.

LinkedIn

관련 문장 - Git Merge