Git rebase-모든 병합 충돌이 해결 된 경우에도 계속 불평 git status를 수행하고 다음을

해결 방법을 잘 모르겠습니다.

내 지점에서 마스터에 대한 리베이스를 수행했습니다.

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
 #

나는 git add AssetsLoader.java 및 git status를 수행하고 다음을 얻었습니다.

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

그리고 내가 git rebase –continue했을 때 다음을 얻습니다.

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

패치를 건너 뛰고 리베이스를 계속할 수 있다는 것을 알고 있지만 PassengerContactHandler.java의 변경 사항이 내 브랜치에 리베이스 될지 여부는 확실하지 않습니다.

잘 모르겠습니다. 어떻게 진행해야하나요?

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

고마워, Lucas

편집, 그것은 나에게 다시 일어났습니다.

다시 나에게 일어난 일

(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) $ git rebase –continue

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

git –version

git version 1.7.1


답변

이는 충돌을 수정할 때 리베이스중인 브랜치에 적용된 패치 비잉의 모든 코드를 제거했기 때문에 발생합니다. git rebase --skip계속 하려면 사용 하세요.

좀 더 자세한 정보 :

일반적으로 리베이스 중에 충돌을 수정할 때 충돌하는 파일을 편집하여 현재 리베이스하는 브랜치에 적용되는 패치의 코드 일부 또는 전체를 유지합니다. 패치를 수정하고 수행 한 후

git add your/conflicted/file
git status

수정 된 파일을 표시하는 (일반적으로 녹색) 줄이 표시됩니다.

수정 됨 : 귀하 / 충돌 / 파일

git rebase –continue는이 상황에서 잘 작동합니다.

그러나 때로는 충돌을 해결할 때 새 패치의 모든 항목을 제거하고 기반으로 한 브랜치의 코드 만 유지합니다. 이제 파일을 추가하면 리베이스하려는 파일과 똑같습니다. git 상태에는 수정 된 파일을 표시하는 녹색 선이 표시되지 않습니다. 자, 그렇다면

git rebase --continue

자식은 불평합니다

변경 사항 없음- ‘git add’사용을 잊으셨습니까?

이 상황에서 git이 실제로 원하는 것은

git rebase --skip

패치를 건너 뜁니다. 이전에 저는 이것을 한 적이 없었습니다. 제가 그렇게한다면 실제로 건너 뛸 것이 무엇인지 항상 확신 할 수 없었기 때문에 “이 패치 건너 뛰기”가 실제로 무엇을 의미하는지 분명하지 않았습니다. 그러나 녹색 선이 없으면

수정 됨 : 귀하 / 충돌 / 파일

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

git rebase --skip

계속하다.

원래 게시물은 이것이 때때로 작동한다고 말했습니다.

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

…하지만 이것에 의존하지 마십시오 (저장소 폴더에 남은 파일을 추가하지 마십시오)


답변

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

이 문제를 해결하는 방법에 대한 좋은 기사가 있습니다.

기본적으로 작동합니다.

git diff

갈등을 해결 한 후

git rebase --continue

작동해야합니다.


답변

준비되지 않은 파일이있을 때이 경고를 받았습니다. 준비되지 않은 파일이 없는지 확인하십시오. 준비되지 않은 파일을 변경하지 않으려면 다음을 사용하여 변경 사항을 취소하십시오.

git rm <filename>

답변

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

$ git mergetool

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


답변

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


답변

AssetsLoader.java에서 병합 충돌을 놓쳤습니다. 그것을 열고 충돌 마커 ( “>>>>”, “====”, “<<<<<“)를 찾은 다음 git add를 다시 수행하십시오. 찾는 데 어려움이 있다면 ‘git diff –staged’를 수행하십시오.


답변

나는 방금이 문제가 있었고 몇 가지 원인이 있다고 생각하지만 여기에 내 것이 있습니다 …

특정 조건에서 커밋을 거부하는 git pre-commit 후크가 있습니다. 이것은 후크의 출력을 표시하기 때문에 수동으로 커밋 할 때 괜찮습니다. 나는 그것을 고치거나 commit –no-verify를 사용하여 무시하도록 선택할 수 있습니다.

문제는 rebase 할 때 rebase –continue가 후크를 호출한다는 것입니다 (최신 변경 사항을 커밋하기 위해). 그러나 rebase는 후크 출력을 표시하지 않고 실패한 것을 확인한 다음 ‘모든 병합 충돌을 편집 한 다음 git add를 사용하여 해결 된 것으로 표시해야합니다’라는 덜 구체적인 오류를 내 보냅니다.

이를 수정하려면 모든 변경 사항을 준비하고 ‘git rebase –continue’대신 ‘git commit’을 시도하십시오. 동일한 후크 문제가 발생하는 경우 실패 이유를 확인해야합니다.

흥미롭게도 git rebase는 git hook의 출력을 표시하지 않지만 후크를 우회하기 위해 –no-verify를 허용합니다.