IT

병합 후 커밋시 Git 오류-치명적 : 병합 중 부분 커밋을 수행 할 수 없음

lottoking 2020. 3. 28. 10:45
반응형

병합 후 커밋시 Git 오류-치명적 : 병합 중 부분 커밋을 수행 할 수 없음


나는 git pull갈등으로 끝난 것을 달렸다 . 나는 갈등을 해결했고 지금은 모든 것이 괜찮습니다 (mergetool도 사용했습니다).

해결 된 파일을 커밋 git commit file.php -m "message"하면 오류가 발생합니다.

fatal: cannot do a partial commit during a merge.

나는 전에 같은 문제가 있었고 -a커밋에서 완벽하게 작동했습니다. 모든 변경 사항을 적용하고 싶지 않기 때문에 이것이 완벽한 방법은 아니라고 생각합니다. 별도의 주석으로 파일을 별도로 커밋하고 싶습니다. 어떻게해야합니까? git에서 왜 병합 후 사용자가 파일을 별도로 커밋 할 수 없습니까? 이 문제에 대한 만족스러운 답변을 찾을 수 없습니다.


커밋 명령에 "-i"를 추가하면이 문제가 해결됩니다. -i는 기본적으로 커밋하기 전에 추가 파일을 준비하도록 지시합니다. 그건:

git commit -i myfile.php

git commit -am 'Conflicts resolved'

이것은 나를 위해 일했습니다. 이것도 시도해 볼 수 있습니다.


git commit -i대부분의 경우 사용할 수 있지만 작동하지 않는 경우

해야합니다 git commit -m "your_merge_message". 병합 충돌 중에 단일 파일 하나를 병합 할 수 없으므로 다음을 수행해야합니다.

  1. 충돌 한 파일 만 준비 ( git add your_file.txt)
  2. git commit -m "your_merge_message"

커밋을 위해 준비하지 않은 무언가가 충돌했을 수 있습니다. git을 사용하면 독립적으로 일을 커밋 할 수 없습니다 (모두 병합의 일부이기 때문에) . git add그런 다음 해당 파일 을 필요로 합니다 git commit -m "Merge conflict resolution". 에 대한 -i플래그 git commit가 추가됩니다.


-mgit merge 충돌을 해결할 때 git commit에서 잊어 버렸을 때 이것을 얻었습니다 .

git commit "commit message"

해야한다

git commit -m "commit message"

오류 메시지에 따르면 병합 후 부분 커밋을 수행 할 수 없습니다. 커밋하는 대신 file.php모든 변경 사항을 커밋해야합니다.

이 작동합니다.

git commit -m "Fixing merge" 

작업 중간에 병합이 중지되었습니다. 파일을 추가 한 다음 'git commit'을 추가해야합니다.

git add file_1.php file_2.php file_3.php git commit

건배


체리 피킹 전체를 버리고 원하는 세트로 파일을 커밋하려면,

git reset --soft <ID-OF-THE-LAST-COMMIT>

당신을 거기에 데려다줍니다.

소프트 리셋은 현재 HEAD를 가리키는 포인터를 커밋 (ish)으로 이동하지만 파일을 변경하지는 않습니다. 강제 재설정은 포인터를 이동시키고 모든 파일을 해당 커밋 (ish) 상태로 되돌립니다. 즉, 소프트 리셋을 사용하면 병합 상태를 지우고 실제 파일을 변경 한 다음 원하는대로 개별적으로 커밋하거나 재설정 할 수 있습니다.


  1. 프로젝트 디렉토리로 이동
    1. 숨겨진 파일 표시 (.git 폴더가 나타납니다)
    2. .git 폴더를여십시오
    3. MERGE_HEAD 제거

    4. 다시 커밋
    5. git이 git이 잠겨 있다고 말하면 .git 폴더로 이동하여 index.lock을 제거하십시오.
    6. 다시 커밋하면 이번에는 모든 것이 잘 작동합니다.

나 자신은 모든 파일을 해결하기 전에 병합을 커밋하려고했을 때 SourceTree에서 발생했습니다. 그런 다음 마지막 파일을 해결 된 것으로 표시했지만 커밋하려고 할 때 여전히이 오류가 발생했습니다. SourceTree를 닫았다가 다시 열었습니다.


Xcode의 소스 제어 만 사용하여 완전히 다른 접근법 으로이 문제를 해결했습니다 .

배경 : 다른 팀은 Beanstalk를 통해 원격 Git 리포지토리로 변경 사항을 적용했습니다. 결국, .xcodeproj 파일은 다른 디렉토리에 있었고 변경 사항은 적용되지 않았습니다. 나중에 커밋하려고 할 때 Xcode에서 Tree Conflict 오류가 발생했습니다.

나무 갈등 스크린 샷

Xcode를 사용하여 수정하는 것이 거의 불가능하기 때문에 .xcodeproj파일을 Git 서버에서 다운로드 한 버전으로 바꿨습니다. 결과적으로 Xcode 프로젝트가 정리되었지만 손상된 풀의 모든 업데이트가 변경 사항으로 표시되어 커밋을 위해 준비되었습니다.

이 모든 개조 및 추가 파일을보십시오

그러나 커밋하려고 할 때 여기에서 설명한 것과 같은 "치명적 : 병합 중에 부분 커밋을 수행 할 수 없습니다"라는 오류가 발생했습니다.

문제를 해결하는 방법은 다음과 같습니다 ... (이제, 신인 프로그래머라는 것을 이해하고 약간의 이해가 부족하지만 ... 내 무지로 인해 다른 방법을 찾게되었습니다.) 먼저 마스터를 복제했습니다. 2 차 지점으로 분기하여 해당 지점으로 전환하십시오. 그런 다음 Working Copy를 작성하고 디렉토리를 원래 프로젝트 디렉토리 외부의 해당 작업 사본에 배치했습니다. (필요한지 모르겠지만 다른 문제 해결 기술을 읽을 때 내가 한 일을 알았습니다.) 그런 다음 지점을 마스터로 전환하여 모든 준비된 파일 (커밋으로 변경)이 사라 졌다는 것을 깨달았습니다. 모든 파일이 상대방의 최신 변경 사항으로 업데이트되도록 모든 파일을 복제하는 ThirdBranch라는 새 브랜치를 만들었습니다. 그것을 Git 서버에 푸시하고 Beanstalk가 마스터 브랜치의 서버 버전을 방금 밀린 ThirdBrach 브랜치 (행별로)와 비교하게하고 상대방의 모든 변경 사항이 내 Xcode에 존재했습니다. 이것은 내 마스터 리포지토리와 Git 마스터 리포지토리가 동일하다는 것을 의미하므로 Xcode를 사용하여 문제를 해결했는지 확인합니다.

방금 설명한 내용을 넘어서서 어떻게해야하는지 묻지 말고 확실히 남은 격차를 메우십시오. 나는 이것에 익숙하지 않으며 모든 것을 이해하지 못합니다. 숙련 된 프로그래머가 관련없는 정보를 관련 정보와 분리하고이 기술을보다 명확하게 재생성 할 수 있습니다.

이것은 다음과 같은 질문에 대한 중복 답변입니다 .Xcode Git Merge가 실패 했습니다.


병합하는 동안 Git은 모든 종류의 이유로 부모 브랜치를 추적하려고합니다. git이 보는 것처럼 병합하는 것은 아닙니다. 리베이스 또는 체리 픽을 수동으로 수행 할 수 있습니다.


git commit -i -m 'merge message'나를 위해 작동하지 않았다. 그것은 말했다 :

fatal: No paths with --include/--only does not make sense.

FWIW, 나는 이 메시지를 받고 있기 때문에이 관련 질문을 통해 여기 에 도착했습니다.

fatal: You have not concluded your merge (MERGE_HEAD exists).

나는 또한 mergetool을 시도했다 No files need merging. 매우 혼란 스럽다! 따라서 MERGE_HEAD는 병합해야하는 파일에 없습니다.

마지막 으로이 트릭을 사용하여 수정 된 파일 만 추가했습니다 (트랙하지 않으려는 일부가 있기 때문에 트리에 모든 파일을 추가하고 싶지는 않았습니다).

git ls-files -m | xargs git add

그런 다음 나는 마침내 커밋하고 밀어 올릴 수있었습니다. git이 이러한 상황에서 무엇을 해야하는지에 대한 힌트를 주면 좋을 것입니다.


가있는 경우 소스 트리 충돌이 해결 된 후 해결, 우리는 명시 적으로 파일을 표시해야합니다. 충돌없이 해결 된 파일선택하십시오 . 그런 다음 조치-> 충돌 해결-> 표시 해결 . 파일이 여러 개인 경우 모두 동일한 작업을 수행하십시오. 지금 커밋하십시오.


모든 의견을 읽은 후. 이것은 내 결의안이었습니다.
커밋보다 다시 "추가"해야했습니다.

$ git commit -i -m support.html "doit once for all" [master 18ea92e] support.html

소스 트리 또는 다른 GUI를 사용하는 경우 병합 후 모든 파일을 확인하십시오.

참고 : https://stackoverflow.com/questions/5827944/git-error-on-commit-after-merge-fatal-cannot-do-a-partial-commit-during-a-mer

반응형