programing

Gitrebase 병합 충돌

yellowcard 2023. 8. 28. 20:58
반응형

Gitrebase 병합 충돌

저는 깃허브 레포를 포크하고 깃허브 레포를 작업했습니다.
풀 요청을 했고 완료되었습니다.

그 후 업스트림에 커밋이 몇 개 더 있어서 이제 리베이스를 하려고 하는데, 제가 해야 할 일이 그것 같습니다.
하지만 다음과 같은 병합 충돌이 발생했습니다.

First, rewinding head to replay your work on top of it...
Applying: Issue 135 homepage refresh
Using index info to reconstruct a base tree...
<stdin>:17: trailing whitespace.
      %h4 
warning: 1 line adds whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging app/views/layouts/application.html.haml
CONFLICT (content): Merge conflict in app/views/layouts/application.html.haml
Auto-merging app/views/home/index.html.haml
CONFLICT (content): Merge conflict in app/views/home/index.html.haml
Auto-merging app/views/home/_group_projects.html.haml
CONFLICT (content): Merge conflict in app/views/home/_group_projects.html.haml
Failed to merge in the changes.
Patch failed at 0001 Issue 135 homepage refresh

When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".

저는 이것들을 고치는 방법을 모릅니다, 도와주세요.

재배치는 정말 골치 아픈 일이 될 수 있습니다.병합 충돌을 해결하고 기본 재배치를 계속해야 합니다.예를 들어 병합 도구를 사용할 수 있습니다(설정에 따라 다름).

git mergetool

그런 다음 변경 사항을 추가하고 계속합니다.

git rebase --continue

행운을 빌어요

만약 여러분이 다시 기반을 두어야 할 많은 커밋이 있고, 그들 중 일부가 갈등을 일으킨다면, 그것은 정말로 고통스럽습니다.하지만 저는 "모든 갈등을 진압하는" 방법에 대해알려진 접근법을 제안할 수 있습니다.

먼저, 임시 분기 체크아웃 및 표준 병합 시작

git checkout -b temp
git merge origin/master

여러분은 갈등을 해결해야 할 것이지만, 오직 한 번만 진짜 갈등을 해결해야 할 것입니다.그런 다음 모든 파일을 준비하고 병합을 마칩니다.

git commit -m "Merge branch 'origin/master' into 'temp'"

그런 다음 분기로 돌아가서 기본 재배치를 시작하지만 충돌은 자동으로 해결됩니다.

git checkout alpha
git rebase origin/master -X theirs

분기가 재배치되었지만 프로젝트가 잘못된 상태일 수 있습니다.괜찮습니다. 마지막 단계가 있습니다.프로젝트 상태만 복구하면 되므로 지점 'temp'와 동일하게 됩니다.기술적으로 낮은 수준의 명령 git commit-tree를 통해 트리(폴더 상태)를 복사하면 됩니다.또한 현재 분기로 병합하면 커밋이 생성됩니다.

git merge --ff $(git commit-tree temp^{tree} -m "Fix after rebase" -p HEAD)

임시 분기 삭제

git branch -D temp

이상입니다.우리는 숨겨진 병합을 통해 리베이스를 했습니다.

또한 제가 대본을 작성했기 때문에 대화 방식으로 할 수 있습니다. 여기서 찾을 수 있습니다.

참고: Git 2.14.x/2.15(2017년 3분기)에서는git rebase충돌 시 메시지가 더 명확해질 것입니다.

윌리엄 듀클로()williamdclt커밋 5fdacc1(2017년 7월 16일)을 참조하십시오.
(주니오 C 하마노에 의해 합병됨 -- -- 2017년 8월 11일 커밋 076eeec에서)

rebase미숙한 사용자의 경우 확인 메시지를 더 명확하게 표시

이전:

When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort"

이후:

Resolve all conflicts manually, 
mark them as resolved with git add/rm <conflicted_files>
then run "git rebase --continue".

You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".')

git UI는 경험이 부족하거나 일상적인 git 사용자에게 오류 메시지를 전달함으로써 개선될 수 있습니다.
이러한 목적을 위해 이러한 메시지에 사용되는 용어가 이 사용자 세그먼트에 의해 이해되고 문제를 해결하는 데 도움이 됩니다.

특히 깃베이스 중에 패치를 적용하지 않는 것은 경험이 부족한 사용자에게 매우 불안정한 일반적인 문제입니다.
( 복잡한 입니다.) 수 수 합니다.--abort".
이 커밋은 해결 프로세스를 상세히 설명하고 암호화된 git linguo를 피함으로써 이 두 가지 사항에 답합니다.

의 큰을 꺼리지 , 가 하는 가장 쉬운 방법은 큰이약하끼괜도어면찮다들만어에약나은방, 내가하가쉬법운장는신당속▁if입니다.git reset --soft <rebase-target>에서 다면당현지재점서에신의그렇서▁from지에점현▁your재▁then▁current.git commit.

예를 여러분의 이 되는 는 예를들어, 당은당지점있에, 고목의당기되는입니다.origin/master단계별/작업 변경사항이 없다고 가정할 때:

# Merge and fix any conflicts from master
git merge origin/master
# Push your changes in case you mess up and want to start over from remote
git push
# Move HEAD to rebase target, leaving all your work staged
git reset --soft origin/master
# Commit staged changes as giant commit
git commit -m "feat(foo): new feature"
# Confirm your changes, run tests, etc. Then force push
git push -f

분기 대상과 기본 재배치 대상 간의 전체 차이가 스테이징 영역으로 이동되어 커밋될 준비가 되었으므로 병합 충돌을 다시 수행할 필요가 없습니다.

삭제, 이름 변경, 변경된 파일이 있는 일부 지나치게 복잡한 경우 모든 파일이 삭제된 상태에서 빈 "버퍼" 커밋을 사용하면 수명이 단축될 수 있습니다.이는 자체적으로 더 많은 유연성을 제공하며, 비워진 다음 커밋을 수행하면 더욱 안정적이고 스냅샷과 유사하게 됩니다.

언급URL : https://stackoverflow.com/questions/11709885/git-rebase-merge-conflict

반응형