git pull
사용하고 병합 충돌이 발생했습니다.
unmerged: _widget.html.erb You are in the middle of a conflicted merge.
파일의 다른 버전은 좋고 내 파일은 좋지 않으므로 모든 변경 사항을 포기해야 합니다. 어떻게 해야 하나요?
질문자 :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
git 버전이 >= 1.6.1이면 git reset --merge
사용할 수 있습니다.
또한 @Michael Johnson이 언급했듯이 git 버전이 >= 1.7.4인 경우 git merge --abort
사용할 수도 있습니다.
항상 그렇듯이 병합을 시작하기 전에 커밋되지 않은 변경 사항이 없는지 확인하십시오.
git merge --abort
MERGE_HEAD
가 있는 경우 git reset --merge
--merge와 동일합니다.
MERGE_HEAD
는 병합이 진행 중일 때 표시됩니다.
또한 병합을 시작할 때 커밋되지 않은 변경 사항과 관련하여:
병합을 시작하기 전에 커밋하고 싶지 않은 변경 사항이 있는 경우 병합 전에 변경 사항을 git stash
하고 병합을 완료하거나 중단한 후에 git stash pop
git merge --abort
현재 충돌 해결 프로세스를 중단하고 병합 전 상태를 재구성해 보십시오.
병합이 시작될 때 커밋되지 않은 작업 트리 변경 사항이 있는 경우
git merge --abort
는 경우에 따라 이러한 변경 사항을 재구성할 수 없습니다. 따라서 git merge를 실행하기 전에 항상 변경 사항을 커밋하거나 숨길 것을 권장합니다.
git merge --abort
MERGE_HEAD
가 있는 경우git reset --merge
--merge와 동일합니다.
나는 그것이 당신에게 필요한 git reset
git revert
svn revert
와 매우 다른 것을 의미합니다. Subversion에서 되돌리기는 커밋되지 않은 변경 사항을 버리고 파일을 저장소에서 현재 버전으로 반환하는 반면 git revert
는 커밋을 "실행 취소"합니다.
git reset
svn revert
와 동일한 작업을 수행해야 합니다. 즉, 원치 않는 변경 사항을 삭제해야 합니다.
이 특정 사용 사례에서는 병합을 중단하지 않고 특정 방식으로 충돌을 해결하기만 하면 됩니다.
재설정하고 다른 전략으로 병합을 수행할 필요도 없습니다. 충돌은 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
자식 >= 1.6.1의 경우:
git merge --abort
이전 버전의 git의 경우 다음 작업을 수행합니다.
git reset --merge
또는
git reset --hard
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
설명된 것과 유사한 시나리오에 대해 훨씬 더 강력하고 일반적으로 병합에 실패했습니다.
병합 단계를 중단할 수 있습니다.
git merge --abort
그렇지 않으면 변경 사항을 유지할 수 있습니다 (현재 지점)
git checkout --ours file1 file2 ...
그렇지 않으면 다른 분기 변경 사항을 유지할 수 있습니다
git checkout --theirs file1 file2 ...
병합 충돌이 발생하고 커밋할 항목이 없지만 여전히 병합 오류가 표시되는 경우. 아래에 언급된 모든 명령을 적용한 후
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
도움이 되기를 바랍니다!!!
작업 복사본의 상태를 유지하는 대안은 다음과 같습니다.
git stash git merge --abort git stash pop
다음 커밋에서 분기 관계를 버리기 때문에 Subversion에서 병합하는 것과 같기 때문에 일반적으로 이에 반대합니다.
Git 1.6.1.3부터 git checkout
은 병합의 양쪽에서 체크아웃할 수 있었습니다.
git checkout --theirs _widget.html.erb
OP가 원하는 것이 아닐 수도 있지만 저에게는 안정적인 분기를 기능 분기에 병합하려고 시도했지만 너무 많은 충돌이 있었습니다. 많은 커밋으로 인해 HEAD가 변경되었기 때문에 변경 사항을 재설정할 수 없었습니다. 그래서 쉬운 해결책은 강제로 안정적인 분기로 체크아웃하는 것이었습니다. 그런 다음 다른 분기로 체크아웃할 수 있으며 병합 전과 같습니다.
git checkout -f master
git checkout side-branch
다음이 저에게 효과적이라는 것을 알았습니다(단일 파일을 병합 전 상태로 되돌리기).
git reset *currentBranchIntoWhichYouMerged* -- *fileToBeReset*
이런 종류의 문제를 피하기 위해 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을 계속합니다. 마지막으로 테스트와 마스터 테스트를 삭제합니다.
관련된? 예, 하지만 내가 준비가 될 때까지는 내 주제나 마스터 브랜치를 엉망으로 만들지 않을 것입니다.
소스 트리
병합을 커밋하지 않았기 때문에 다른 분기를 두 번 클릭(즉, 체크아웃을 의미함)하고 sourcetree가 모든 변경 사항을 폐기할지 묻는 메시지를 표시하면 동의합니다. :)
업데이트
나는 많은 다운 투표를 보았지만 어떤 commet ... 나는 SourceTree를 git 클라이언트로 사용하는 사람들을 위해 해결 된이 답변을 남길 것입니다 (나는 - OP가 묻는 질문에 대한 솔루션을 찾을 때)
출처 : http:www.stackoverflow.com/questions/101752/i-ran-into-a-merge-conflict-how-can-i-abort-the-merge
JavaScript에서 "undefined"를 어떻게 확인할 수 있습니까? [복제하다] (0) | 2021.11.09 |
---|---|
열 값을 기반으로 DataFrame에서 행을 어떻게 선택합니까? (0) | 2021.11.09 |
__init__.py는 무엇을 위한 것입니까? (0) | 2021.11.09 |
이미 Git 저장소에 커밋된 파일 무시 [중복] (0) | 2021.11.09 |
PHP에서 SQL 주입을 방지하려면 어떻게 해야 합니까? (0) | 2021.11.09 |