2016-06-18 2 views
1

나는 자식 안에 깊이 묻혀 있습니다. Git 리베이스가 빨리 감기를 표시합니다.

어떻게 거기 않았다

내가 자식 전문가가 아니다. 세부 사항이 부족한 경우 설명해주십시오. 며칠 전에 다음 명령을 실행하여 변경 사항을 원격 지점으로 푸시했습니다.

% git checkout master 
% git pull 
% git checkout redactor_changes <-- this is the branch that I made my changes 
% git commit -m "changes" # I added my changes previously 
% git rebase master 
% git push origin redactor_changes # pushed changes to remote branch 

모든 사용자에게 마스터 분기의 변경 사항을 병합 할 수있는 쓰기 권한이있는 것은 아닙니다. 원격 저장소에 대한 쓰기 권한이있는 사람은 갈등이 있고 rebase를하고 다시 제출한다고했습니다. 그래서 오늘 다음 명령을 정확한 순서로 실행했습니다.

[email protected]:~/oblog$ git add oblog/static/css/styles-custom.css 
[email protected]:~/oblog$ git add oblog/static/js/redactor.upload_image.js 
[email protected]:~/oblog$ git add oblog/static/images/loading.gif 
[email protected]:~/oblog$ git commit -m "Throw a toast when user upload an non-image file with image extension" 
[email protected]:~/oblog$ git branch 
[email protected]:~/oblog$ git checkout master 
[email protected]:~/oblog$ git pull 
[email protected]:~/oblog$ git checkout redactor_changes 
[email protected]:~/oblog$ git rebase master 
[email protected]:~/oblog$ git merge master 
[email protected]:~/oblog$ git branch 
[email protected]:~/oblog$ git push origin redactor_changes 

이 명령 집합은 내가 도망 갈 수없는 월풀로 나를 빨아 들였습니다.

증상 :

! [rejected]  redactor_changes -> redactor_changes (non-fast-forward) 
error: failed to push some refs to 'https://git.<domain>.com/web/oblog.git' 
hint: Updates were rejected because the tip of your current branch is behind 
hint: its remote counterpart. Integrate the remote changes (e.g. 
hint: 'git pull ...') before pushing again. 
hint: See the 'Note about fast-forwards' in 'git push --help' for details. 

그래서 나는 동료 SO

  1. https://stackoverflow.com/a/20467414/1431184
  2. https://stackoverflow.com/a/6897674/1431184
  3. 의 조언을 따라 위의 코드의

    마지막 줄은 오류를 다음 던졌습니다

하지만 문제는 계속됩니다.

LABLE는 : 내가 마스터 (로컬) 내 지점을 리베이스

, 내가 수동으로 수정하고 REBASE의 --continue을 일부 충돌이 발생합니다. Rebase가 성공했습니다. 그런 다음 다시 출처로 내 지점을 밀어, 그것은 나에게 같은 오류를 보여 주었다! [거부].

git와 SO가 제안한 것처럼 원격 지점의 변경 사항을 로컬 지점 (redactor_changes)으로 가져옵니다. 그런 다음하여 LABEL에 저를 다시 넣습니다

git rebase master 

을 실행. 이것은 단지 계속됩니다.

내 push 명령은 마스터로 리베이스하지 않을 경우 작동하지만 원격 git의 소유자는 내 브랜치 (redactor_changes)를 마스터에 병합하려고 할 때 충돌을 계속 볼 수 있습니다.

+0

제가보기에 하나의 문제는'git rebase master'를 실행 한 후 즉시'git merge master '를했기 때문입니다. 왜이 짓을 했나요? –

+0

내 의도는 변경 사항을 마스터와 병합하여 내 지점을 최신 상태로 만든 다음 rebase를 실행하여 지점을 마스터에 배치하는 것이 었습니다. 그게이 모든 문제를 일으킨 것 같아요? – printfmyname

답변

4

redactor_changes 분기를 master에 리베이스 할 때마다 이전 분기의 최신 변경 사항을 이전 분기로 가져옵니다. 그림의 방법으로 설명하기 :

master:   A -- B -- D 
redactor_changes: A -- B -- C 

이 간단한 그림은 당신이 커밋 B에서 master을 분기 있다고 가정합니다. 그 이후로 redactor_changes (C)으로 커밋 한 사람이 있고 다른 사람이 master 지사 (D)로 커밋했습니다.다음 명령

git checkout redactor_changes 
git rebase master 

을 실행하면 이제

master:   A -- B -- D 
redactor_changes: A -- B -- D -- C' 

리베이스는 master에서 새 커밋에 데려에 성공 다음 그림으로 끝날 것입니다하지만의 역사를 다시 작성 으로 이렇게했다 귀하의 redactor_changes 지점. 이는 검토자가 단지 (빠른 병합)master 브랜치 (변경 사항이 적용된 (병합 완료 없음))를 의미 할 수 있기 때문에 좋은 것입니다. 하지만 한 가지 부작용이 있습니다. 리모컨으로 더 이상 redactor_changes을 푸시 할 수 없습니다. 더 이상 redactor_changes 망할 놈의 역사를 다시 썼다 원격 지점에 커밋을 재생하는 방법을 알고 있기 때문에 다음 명령

git push origin redactor_changes 

를 노력하는 것은 당신에게 당신이

! [rejected] redactor_changes -> redactor_changes (non-fast-forward) error: failed to push some refs to ' https://git ..com/web/oblog.git'
hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart...

보고 된 오류 메시지를 제공하지 않습니다.

솔루션 :

당신이 가장 가능성이 원하는 솔루션은 원격로 redactor_changes 지점에 :

git checkout redactor_changes 
git rebase master 
git push --force redactor_changes 

는이 작업을 수행하고 오류 메시지가 사라한다. 이 경우 redactor_changes은 개인 지점이며 다른 사람과 공유하지 않는다고 가정합니다.

워크 플로와 관련된 몇 가지 다른 문제도 확인했습니다. 이미 rebase 한 후에 masterredactor_changes에 병합하십시오. 그러나 강제 추진은 적어도 당신의 상황을 진전시켜야합니다.

+0

내가 제출 한 변경 사항은 제작에 들어가야하므로 마스터와 병합하기위한 것입니다. 위의 명령을 실행하여 git이 내 브랜치를 개인용으로 취급하게하려면 원격 git의 ower가 마스터와 병합을 시도 할 때 여전히 오류가 발생합니다. 내가 지점에서 모든 항목을 삭제할 수 있습니까? 예 : 지사가 원격지 Repo와 정확히 일치하도록 모든 변경 사항을 되돌릴 수 있습니까? 변경 세트가 그리 크지 않기 때문에 수동으로 모든 파일을 저장하고 변경 사항을 전송할 수 있습니다. – printfmyname

+0

당신의 의견이 나에게 의미가 없기 때문에 힘내 워크 플로우를 이해하지 못하고 있다고 생각합니다. –

+0

강제 강제 적용 권한이없는 경우에는 리베이스 워크 플로를 사용하지 않아야합니다. –

관련 문제