2012-04-05 2 views
2

나는 우리의 중앙 자식 저장소에 일부 변경을 추진 한 다음 바로 내가 주위에 거짓말 오래된, 지금은 사용되지 않는 변화가 있었다 것을 깨달았다, 나는 그것으로 병합 소개했다 그 : 다음 사용rebase 후 새로운 히스토리를 밀어 넣으시겠습니까?

before

을 자식이 가짜 부모를 제거하는 리베이스 :

after

은 그럼 원점 git push -f으로이 밀었다. 그것은 "모든 것을 최신으로"응답합니다.

이제 중앙 저장소가 내가 로컬에있는 저장소와 일치해야합니다. 그러나, 제가 clone 프로젝트를 새로 시작할 때, 나는 여전히 가짜 부모를 가지고 있습니다. 더 나쁜 것은 병사가 병합하기를 원한다는 것이고, 내가 그렇게한다면, 나는 최근의 커밋을 두 번 얻는다. (예전의 해시에서는 한 번, 리베이스 이후에는 새로운 해시로 한 번).

병합없이 병합 작업을 수행하려면 어떻게해야합니까? 그리고 기본적으로 저장소 상태를 새 상태로 가져옵니다. 기본적으로 모두 거부합니다. 원격 차이점)?

내가 잘못 했습니까? 나는 "속성을 읽을 때 ..."을 없애고 위 이미지의 전체 빨간 선을 없애기를 원합니다.

답변

1

다양한 방법으로 문제를 해결할 수 있습니다. 한 가지 방법은 리셋, 숨김 및 커밋을 사용하여 로컬로 기록을 재구성하는 것입니다. 다음은 마지막 커밋을 취소하고 (초기 가져 오기 ...) 변경 사항을 숨기려고합니다. 이제

git reset --mixed HEAD^ 
git stash 

당신은 당신이 병합을 한 전에 한 커밋에 마스터를 재설정 할 수는 ABCD1234 가정하면의 해시는 "테스트 자식." 커밋 :

git reset --hard abcd1234 

이제 숨겨 놓은 돌아 오게하고 다시 커밋 :

git stash pop 
git add . 
git commit -m 'Initial import of the C++ client library.' 

이제 마침내 다시 마스터 밀어 :

git push -f origin master 
+0

감사합니다, 그것은했다! 'stash'에 대해 몰랐습니다. 또한 push.allowyNonFastForwards를 푸시 (http://stackoverflow.com/a/1377930/143091)를 수락하도록 변경해야했습니다. – jdm

+0

행복하게 해줬습니다. :) – ralphtheninja

+0

당신이 리베이스를 한 후에 첫 푸시가 작동하지 않는 이유가 여기에 있습니다. 말이된다. – ralphtheninja

관련 문제