2014-04-10 4 views
1

으로 내가 할 때 내가 지금는 REBASE로 받기 -> 병합주기 힘내

내 지역 지점은 원격 지사와 동기화 갔다/주류 원격 분기 원은 그래서 자식 풀을 한 추적 분기 본선을 가지고 자식 상태는 내가 얻을 :

Your branch is ahead of 'origin/mainline' by 2 commits. 

이 지금은 하나의 커밋으로 다음을 squansh 할 그래서 그것은 내가 커밋 스쿼시 및 사용 하나를 선택할 수있는 파일을 열어

git rebase -i HEAD~2 

을 달렸다. 난 단지 2 커밋 (내 원래 최상위 수준의 커밋 + 당겨 후 병합)을 보여줄 것으로 기대했지만 병합 커밋없이 그들에 3 커밋이 있습니다. 내가 앞뒤로 가서 이것들을 하나의 하나에 넣으면, 내가 갈등을 겪고 있다고 불평한다.

내가 충돌을 해결하고 git rebase를 실행하면 - 계속 2 커밋이있는 상태가 계속됩니다 !! 이 문제를 해결하는 데 도움주세요, 여기 거의 하루 동안 stck !!

답변

2

Rebase는 일반적으로 병합을 보존하지 않으므로 또는 --preserve-merges 플래그를 전달해야합니다.

그러나 리모컨과 동기화하는 프로세스가 올바르지 않으며 이미 다른 사람과 푸시되고 공유 된 커밋을 다시 작성할 수 있으므로 동기화 및 충돌로 인해 많은 문제가 발생할 수 있습니다. 당신이 원하는 경우

git fetch origin 
git rebase origin/mainline mainline 
git rebase -i mainline~2 

당신은 마지막 두 명령을 결합 할 수 있지만, 일을 : 당신이 스쿼시를하고 싶었다 경우 대신 풀과 병합을하는

은, 다음, 당신이 가져온 대신으로 업데이트해야한다 그 (것)들은 따로 따로 git diff [email protected]{1}를해서 스쿼시로 무엇이든 엉망이되지 않았다는 것을 확인할 수있는 장점이 있습니다.

따라서 현 상태에서 벗어나려면 mainline^으로 하드 재설정하거나 병합/풀을 시도하기 전의 상태로 커밋 한 다음 위의 rebase 명령을 실행하십시오.

+0

그래, 효과가 있었다. 나는 내가 만든 병합을 단단히 고쳐야 만했다. 그런 다음 rebase origin/mainline을 실행했다 !! 응답 해 주셔서 감사합니다. 또한 git pull 대신 git fetch를 사용하여 로컬 repo를 업데이트하는 방법을 언급합니다. 나는 빠른 검색을했고 diff B/w는 2가 인출 후에 병합하려고 시도하는 것처럼 보였다. 하지만 그게 extacly 내가 코드 rt를 밀기 전에 무엇을하고 싶은가요? 즉, 로컬 브랜치에 최신 변경 사항을 적용하는 것입니다. – broun

+0

@ maver1k 로컬 브랜치를 업데이트하는 두 가지 다른 방법이 있습니다. 변경 사항을 병합하거나 새로운 변경 사항 위에 브리징 할 수 있습니다. 그러나 커밋을 쪼개서 역사를 바꾸려면 병합 대신 rebase해야합니다. 그렇지 않으면 내가 말했듯이, 당신이하고있는 일을 이해하지 못한다면, 이미 역사가 다시 쓰여지게 될 것입니다 다른 사람들과 공유되었는데, 이는 아마도 당신이하고 싶은 것이 아닙니다. –