etc./StackOverFlow

병합 충돌이 발생했습니다. 병합을 어떻게 중단할 수 있습니까?

청렴결백한 만능 재주꾼 2021. 11. 9. 00:28
반응형

질문자 :Gwyn Morfey


git pull 사용하고 병합 충돌이 발생했습니다.

 unmerged: _widget.html.erb You are in the middle of a conflicted merge.

파일의 다른 버전은 좋고 내 파일은 좋지 않으므로 모든 변경 사항을 포기해야 합니다. 어떻게 해야 하나요?



pull 에 실패하면 HEAD ( HEAD^ 아님)가 분기의 마지막 "유효한" 커밋입니다.

 git reset --hard HEAD

원하는 다른 부분은 변경 사항이 변경 사항보다 우선 적용되도록 하는 것입니다.

이전 버전의 git에서는 "자신의" 병합 전략을 사용할 수 있었습니다.

 git pull --strategy=theirs remote_branch

그러나 이것은 Junio Hamano (Git 관리자)가 이 메시지에서 설명한 대로 이후 제거되었습니다. 링크에 언급된 대로 대신 다음을 수행합니다.

 git fetch origin git reset --hard origin

Pat Notz

git 버전이 >= 1.6.1이면 git reset --merge 사용할 수 있습니다.

또한 @Michael Johnson이 언급했듯이 git 버전이 >= 1.7.4인 경우 git merge --abort 사용할 수도 있습니다.

항상 그렇듯이 병합을 시작하기 전에 커밋되지 않은 변경 사항이 없는지 확인하십시오.

git merge 맨 페이지에서

git merge --abort MERGE_HEAD 가 있는 경우 git reset --merge --merge와 동일합니다.

MERGE_HEAD 는 병합이 진행 중일 때 표시됩니다.

또한 병합을 시작할 때 커밋되지 않은 변경 사항과 관련하여:

병합을 시작하기 전에 커밋하고 싶지 않은 변경 사항이 있는 경우 병합 전에 변경 사항을 git stash 하고 병합을 완료하거나 중단한 후에 git stash pop


Carl

git merge --abort

현재 충돌 해결 프로세스를 중단하고 병합 전 상태를 재구성해 보십시오.

병합이 시작될 때 커밋되지 않은 작업 트리 변경 사항이 있는 경우 git merge --abort 는 경우에 따라 이러한 변경 사항을 재구성할 수 없습니다. 따라서 git merge를 실행하기 전에 항상 변경 사항을 커밋하거나 숨길 것을 권장합니다.

git merge --abort MERGE_HEAD 가 있는 경우 git reset --merge --merge와 동일합니다.

http://www.git-scm.com/docs/git-merge


ignis

나는 그것이 당신에게 필요한 git reset

git revert svn revert 와 매우 다른 것을 의미합니다. Subversion에서 되돌리기는 커밋되지 않은 변경 사항을 버리고 파일을 저장소에서 현재 버전으로 반환하는 반면 git revert 는 커밋을 "실행 취소"합니다.

git reset svn revert 와 동일한 작업을 수행해야 합니다. 즉, 원치 않는 변경 사항을 삭제해야 합니다.


David Precious

이 특정 사용 사례에서는 병합을 중단하지 않고 특정 방식으로 충돌을 해결하기만 하면 됩니다.

재설정하고 다른 전략으로 병합을 수행할 필요도 없습니다. 충돌은 git에 의해 올바르게 강조 표시되었으며 다른 쪽 변경 사항을 수락해야 하는 요구 사항은 이 하나의 파일에만 해당됩니다.

충돌에서 병합되지 않은 파일의 경우 git은 인덱스에 있는 파일의 공통 기반, 로컬 및 원격 버전을 사용할 수 있도록 합니다. git mergetool 의해 3방향 diff 도구에서 사용하기 위해 읽혀집니다.) git show 를 사용하여 볼 수 있습니다.

 # common base: git show :1:_widget.html.erb # 'ours' git show :2:_widget.html.erb # 'theirs' git show :3:_widget.html.erb

원격 버전을 그대로 사용하여 충돌을 해결하는 가장 간단한 방법은 다음과 같습니다.

 git show :3:_widget.html.erb >_widget.html.erb git add _widget.html.erb

또는 git >= 1.6.1:

 git checkout --theirs _widget.html.erb

CB Bailey

자식 >= 1.6.1의 경우:

 git merge --abort

이전 버전의 git의 경우 다음 작업을 수행합니다.

 git reset --merge

또는

 git reset --hard

Hanzla Habib

git reset --merge git merge --abort 의 별칭이라고 제안합니다. git merge --abort 는 MERGE_HEAD가 있는 경우에만 git reset --merge --merge와 동일하다는 점에 MERGE_HEAD 가 있습니다. 이것은 병합 명령에 대한 git 도움말에서 읽을 수 있습니다.

git merge --abort는 MERGE_HEAD가 있는 경우 git reset --merge와 동일합니다.

실패한 병합 후 MERGE_HEAD git reset --merge --merge 를 사용하여 실패한 병합을 취소할 수 있지만 반드시 git merge --abort . 그것들은 동일한 것에 대한 구식과 신구문일 뿐만이 아닙니다 .

개인적으로 git reset --merge 설명된 것과 유사한 시나리오에 대해 훨씬 더 강력하고 일반적으로 병합에 실패했습니다.


Martin G

병합 단계를 중단할 수 있습니다.

 git merge --abort

그렇지 않으면 변경 사항을 유지할 수 있습니다 (현재 지점)

 git checkout --ours file1 file2 ...

그렇지 않으면 다른 분기 변경 사항을 유지할 수 있습니다

 git checkout --theirs file1 file2 ...

DARK_C0D3R

병합 충돌이 발생하고 커밋할 항목이 없지만 여전히 병합 오류가 표시되는 경우. 아래에 언급된 모든 명령을 적용한 후

 git reset --hard HEAD git pull --strategy=theirs remote_branch git fetch origin git reset --hard origin

제거해주세요

.git\index.lock

파일 [복구의 경우 다른 위치에 붙여넣기]를 수행한 다음 원하는 버전에 따라 아래 명령 중 하나를 입력합니다.

 git reset --hard HEAD git reset --hard origin

도움이 되기를 바랍니다!!!


Nirav Mehta

작업 복사본의 상태를 유지하는 대안은 다음과 같습니다.

 git stash git merge --abort git stash pop

다음 커밋에서 분기 관계를 버리기 때문에 Subversion에서 병합하는 것과 같기 때문에 일반적으로 이에 반대합니다.


Alain O'Dea

Git 1.6.1.3부터 git checkout 은 병합의 양쪽에서 체크아웃할 수 있었습니다.

 git checkout --theirs _widget.html.erb

Alain O'Dea

OP가 원하는 것이 아닐 수도 있지만 저에게는 안정적인 분기를 기능 분기에 병합하려고 시도했지만 너무 많은 충돌이 있었습니다. 많은 커밋으로 인해 HEAD가 변경되었기 때문에 변경 사항을 재설정할 수 없었습니다. 그래서 쉬운 해결책은 강제로 안정적인 분기로 체크아웃하는 것이었습니다. 그런 다음 다른 분기로 체크아웃할 수 있으며 병합 전과 같습니다.

git checkout -f master

git checkout side-branch


Daniel

다음이 저에게 효과적이라는 것을 알았습니다(단일 파일을 병합 전 상태로 되돌리기).

 git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset*

Malcolm Boekhoff

이런 종류의 문제를 피하기 위해 git merge --abort 접근 방식을 확장하고 병합하기 전에 별도의 테스트 분기 를 만들 수 있습니다.

케이스 : 당신이 산만있어 때문에 주제 지점을 가지고,이 합병되지 않은 / 준비 뭔가 당신이 알고 / 등장하지만 (또는이었다).

이제 이것을 마스터에 병합 할 수 있습니까?

테스트 브랜치에서 작업하여 솔루션을 추정/찾은 다음 테스트 브랜치를 포기하고 토픽 브랜치에 솔루션을 적용합니다.

 # Checkout the topic branch git checkout topic-branch-1 # Create a _test_ branch on top of this git checkout -b test # Attempt to merge master git merge master # If it fails you can abandon the merge git merge --abort git checkout - git branch -D test # we don't care about this branch really...

갈등을 해결하기 위해 노력하십시오.

 # Checkout the topic branch git checkout topic-branch-1 # Create a _test_ branch on top of this git checkout -b test # Attempt to merge master git merge master # resolve conflicts, run it through tests, etc # then git commit <conflict-resolving> # You *could* now even create a separate test branch on top of master # and see if you are able to merge git checkout master git checkout -b master-test git merge test

마지막으로 토픽 브랜치를 다시 체크아웃하고 테스트 브랜치에서 수정 사항을 적용하고 PR을 계속합니다. 마지막으로 테스트와 마스터 테스트를 삭제합니다.

관련된? 예, 하지만 내가 준비가 될 때까지는 내 주제나 마스터 브랜치를 엉망으로 만들지 않을 것입니다.


sastorsl

소스 트리

병합을 커밋하지 않았기 때문에 다른 분기를 두 번 클릭(즉, 체크아웃을 의미함)하고 sourcetree가 모든 변경 사항을 폐기할지 묻는 메시지를 표시하면 동의합니다. :)

업데이트

나는 많은 다운 투표를 보았지만 어떤 commet ... 나는 SourceTree를 git 클라이언트로 사용하는 사람들을 위해 해결 된이 답변을 남길 것입니다 (나는 - OP가 묻는 질문에 대한 솔루션을 찾을 때)


Kamil Kiełczewski

출처 : http:www.stackoverflow.com/questions/101752/i-ran-into-a-merge-conflict-how-can-i-abort-the-merge

반응형