it-source

Gitrebase - 모든 병합 충돌이 해결된 경우에도 계속 불만 제기

criticalcode 2023. 6. 30. 22:24
반응형

Gitrebase - 모든 병합 충돌이 해결된 경우에도 계속 불만 제기

저는 어떻게 해결해야 할지 모르는 문제에 직면해 있습니다.

나는 내 지점의 주인에게 반항했습니다.

git rebase master

그리고 다음과 같은 오류를 얻었습니다.

 First, rewinding head to replay your work on top of it...
 Applying: checkstyled.
 Using index info to reconstruct a base tree...
 Falling back to patching base and 3-way merge...
 Auto-merging AssetsLoader.java
 CONFLICT (content): Merge conflict in AssetsLoader.java
 Failed to merge in the changes.
 Patch failed at 0001 checkstyled.

그래서 제가 가장 좋아하는 편집기로 가서 1줄 충돌을 수정하고 파일을 저장한 다음 git 상태를 수행하여 다음과 같은 출력을 얻었습니다.

 # Not currently on any branch.
 # Changes to be committed:
 #   (use "git reset HEAD <file>..." to unstage)
 #
 #  modified:   PassengerContactHandler.java
 #
 # Unmerged paths:
 #   (use "git reset HEAD <file>..." to unstage)
 #   (use "git add/rm <file>..." as appropriate to mark resolution)
 #
 #  both modified:      AssetsLoader.java
 #

AssetsLoader.java 및 git 상태를 git 추가하여 다음을 확인했습니다.

 # Not currently on any branch.
 # Changes to be committed:
 #   (use "git reset HEAD <file>..." to unstage)
 #
 #  modified:   AssetsLoader.java
 #  modified:   PassengerContactHandler.java
 #

그리고 Gitrebase를 실행했을 때 --계속해서 다음과 같이 표시됩니다.

git rebase --continue
You must edit all merge conflicts and then
mark them as resolved using git add

패치를 건너뛰고 기본 재배치를 계속할 수는 있지만 PassengerContactHandler.java의 변경 사항이 제 지점에 반영될지는 모르겠습니다.

그래서 잘 모르겠어요, 어떻게 진행하면 좋을까요?

편집: 충돌이 해결된 파일이 원래 버전과 똑같을까요?

정말 고마워, 루카스

편집, 방금 또 이런 일이 발생했습니다.

또 그런 일이 벌어졌어요

(307ac0d...)|REBASE)$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   assets/world/level1/Level-1.xml
#   modified:   George.java
#   modified:   DefaultPassenger.java
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   mb-art/originalAssets/27dec/

((307ac0d...|REBASE)$ gitrebase --계속

You must edit all merge conflicts and then
mark them as resolved using git add

git --버전

git version 1.7.1

충돌을 해결할 때, 다시 기반으로 하는 분기에 적용되는 패치의 모든 코드를 제거했습니다.모든 변경 사항을 추가한 것이 확실한 경우:사용하다git rebase --skip계속합니다.

의심스러울 때

작업 손실을 방지하기 위해:

  • 를 중단합니다.git rebase --abort
  • 다음 새 분기를 .git checkout -b my-rebasebranch
  • 새 을 다시 합니다.git rebase origin/main 뭐든지 (는무엇또든이)또

자세한 정보:

일반적으로 기본 재배치 중에 충돌을 해결할 때 충돌 파일을 편집하여 패치의 일부 또는 전체 코드가 현재 기반으로 하는 분기에 적용되고 있습니다.패치를 수정하고 실행한 후

git add your/conflicted/file
git status

수정된 파일을 보여주는 (일반적으로 녹색) 라인이 표시됩니다.

수정됨: 사용자/수정됨/파일

gitrebase --이 상황에서는 잘 작동할 것입니다.

그러나 충돌을 해결할 때 새 패치의 모든 항목을 제거하고 기반이 되는 분기의 코드만 유지하는 경우가 있습니다.이제 당신이 파일을 추가할 때, 그것은 당신이 다시 기초하려고 했던 것과 정확히 같을 것입니다. git 상태는 수정된 파일을 표시하는 녹색 선을 표시하지 않습니다.자, 만약 그렇다면,

git rebase --continue

에 대해 불평할 것입니다.

변경 사항 없음 - 'git add'를 사용하는 것을 잊으셨습니까?

모든 변경사항을 추가한 것이 확실하다면, 이 상황에서 실제로 수행하기를 원하는 것은 다음과 같습니다.

git rebase --skip

패치를 건너뜁니다.이전에는 이 작업을 수행한 적이 없었습니다. 이 작업을 수행할 경우 실제로 건너뛸 수 있는 작업이 무엇인지 항상 확신하지 못했기 때문에 "이 패치를 건너뜁니다."가 실제로 무엇을 의미하는지는 명확하지 않았습니다.하지만 만약 당신이 녹색 선을 얻지 못한다면.

수정됨: 사용자/수정됨/파일

충돌된 파일을 편집하고, 추가하고, git 상태를 수행한 후에는 전체 패치를 제거하고, 대신 사용할 수 있습니다.

git rebase --skip

계속합니다.

원래 게시물은 이것이 때때로 효과가 있다고 말했습니다.

git add -A
git rebase --continue
# works magically?

그러나 이에 의존하지 마십시오(그리고 저장소 폴더에 남아 있는 파일을 추가하지 마십시오)

준비되지 않은 파일이 있을 때 이 경고가 발생했습니다.준비되지 않은 파일이 없는지 확인합니다.준비되지 않은 파일을 변경하지 않으려면 다음을 사용하여 변경 내용을(를) 사용하여

git rm <filename>  

Git 1.7의 버그인 것 같습니다.

이것을 해결하는 방법에 대한 좋은 기사가 있습니다.(링크는 2022년에 더 이상 작동하지 않을 것으로 보입니다)

기본적으로, 만약 당신이 한다면, 그것은 작동할 것입니다.

git diff

충돌을 해결한 후에

git rebase --continue

작동해야 합니다.

변경 내용을 수정한 후에는 'git add -A'를 실행하는 것을 잊어버릴 수 있습니다.

git add -A
git rebase --continue

충돌을 해결한 후 변경된 파일이 준비된 파일에 추가되었는지 확인합니다.이것으로 저는 문제를 해결했습니다.

명령줄에서 실행해 보십시오.

$ git mergetool

충돌을 해결할 수 있는 대화형 편집기를 불러옵니다.수동으로 수행하는 것보다 쉽고 병합을 수행할 때 Git도 인식합니다.또한 수동으로 병합하려고 할 때 발생할 수 있는 실수로 완전히 병합되지 않는 상황도 방지합니다.

저는 방금 이 문제를 겪었고, 몇 가지 원인이 있을 수 있지만, 여기 제 문제가 있습니다.

특정 조건에서 커밋을 거부하는 깃 사전 커밋 후크가 있었습니다.수동으로 커밋할 때는 후크의 출력이 표시되고 수정하거나 commit --no-verify를 사용하여 무시할 수 있기 때문에 문제가 없습니다.

문제는 리베이스, 리베이스 --continue가 또한 후크를 호출한다는 것입니다(마지막 변경 사항을 커밋하기 위해).그러나 기본 재배치는 후크 출력을 표시하지 않고 실패했음을 확인한 다음 '모든 병합 충돌을 편집한 다음 git add를 사용하여 해결된 것으로 표시해야 합니다'라는 덜 구체적인 오류를 뱉습니다.

수정하려면 모든 변경 사항을 준비하고 'gitrebase --continue' 대신 'git commit'을 시도합니다.동일한 후크 문제를 겪고 있는 경우 실패하는 이유를 확인해야 합니다.

흥미롭게도 Gitrebase는 Githook의 출력을 표시하지 않지만 --no-verify를 허용하여 후크를 바이패스합니다.

AssetsLoader.java에서 병합 충돌을 놓쳤습니다.그것을 열고 충돌 마커(">>>), "====", "<<<")를 찾은 다음 다시 추가합니다.찾기가 어렵다면 'git diff --stage'를 수행합니다.

저는 방금 그 문제를 우연히 발견했습니다.난 안 그랬을 거야.git rebase --skip왜냐면git status제가 지키고 싶었던 단계적인 수정 사항을 분명히 보여줍니다.예상치 못한 파일이 몇 개 더 있긴 했지만요.로 결심했습니다.

git checkout .

단계별로 표시되지 않은 수정 사항을 제거하려면,git rebase --continue성공했다.

magit(git에 널리 사용되는 emacs 프론트엔드)를 사용하는 경우 magit의 알 수 없는 버그로 인해 이 오류 메시지가 표시될 수 있습니다.무엇이 이 버그를 유발하는지는 정확히 알 수 없지만, 파일에 대한 줄 끝 부분만 변경되었고, Magit은 파일을 충돌로 표시하지 않았습니다.그래서 저는 갈등이 남아 있지 않다고 생각했는데, 있었습니다.입니다.git status명령행에서 충돌하는 파일을 볼 수 있도록 허용하고, 그리고 나서 실행할 수 있었습니다.git add 파일 이름 및 그 다음git rebase --continue.

승인된 답변은 오해의 소지가 있습니다.저장할 수 있는 문제가 더 많이 발생합니다(댓글 참조).

는 것을 깨달았습니다.git rebase --continue로컬 파일을 수정했지만 준비되지 않았기 때문에 작동하지 않았습니다.다음을 실행하면 준비되지 않은 로컬 수정사항이 억제됩니다.그러니 이것이 당신이 원하는 것이라는 것을 조심하세요.

git checkout .

대신 수정 사항을 준비하려면 실행git add <name of the file>.

수정 사항을 저장(쉘프)하려면 다음을 실행합니다.git stash -k.

입니다.git rebase --continue다음 명령 중 하나 뒤에 작동해야 합니다.

저장을 선택한 경우 실행git stash pop(이후git rebase --continue)을 클릭하여 수정 사항을 복원합니다.

언급URL : https://stackoverflow.com/questions/8523776/git-rebase-continue-complains-even-when-all-merge-conflicts-have-been-resolved

반응형