2012-05-10 2 views
1

새로운 개발자가 큰 자식 저장소에 미쳐서 정말로 엉망으로 밀었습니다. 그의 모든 변경 사항은 버려 질 수 있습니다.자식이 분기를 분기했다 - 되돌리기 변경

내 문제 : 우리의 git hoster는 push --force를 허용하지 않으므로, 먼저 당겨야합니다.

이렇게하면 많은 병합과 충돌이 발생하며 문제를 해결할 필요가 없습니다. 다른 사람이 수행 한 모든 변경 사항을 되돌리기 위해 현재 버전을 푸시 할 수있는 가장 좋은 방법은 무엇입니까?

+0

당신의 자식 호스트는 무엇입니까? – CharlesB

+0

http://beanstalkapp.com – theduke

답변

1

git revert

은 어쨌든, 유일한 대안이다.

같은 상황에있는 다른 사람들을 위해 내 솔루션을 게시하고 있습니다. 쉬운 방법 일 가능성이 높습니다. 알고 계시면 주저하지 말고 게시하십시오.


먼저 모든 변경 사항을 적용하여 깨끗한 작업 디렉토리를 만듭니다. git status로 변경 사항이 없음을 확인하십시오.

그런 다음 변경 사항을 저장할 새 임시 분기를 만듭니다.

git branch tmp 

이제 마지막 커밋과 원격 브랜치가 분기되어야합니다. 63da978a9a4620790b75dfbae86d658a65dc3e25와 같은 커밋 해시가 필요합니다.

발견되면 마스터 분기를 해당 커밋으로 재설정하십시오.

git reset --hard COMMIT 

이제 리모컨에서 변경 사항을 가져옵니다. 충돌이 일어나지 않아야합니다.

git pull origin master 

이제 버려야 할 커밋을 되돌릴 수 있습니다. 모든 변화와 TMP 지점을 다시 병합 : 당신이 바로 모든 일을 한 경우

git revert COMMIT1 

, 프로세스를 완료 한 마지막 단계가있다.

git merge tmp 

다시, 충돌은 발생하지 않아야합니다.

이제 다시 푸시 할 수있는 최신 분기가 있습니다. 만세!

git push origin master 
0

충돌을 피하려면 (git pull에 의해) 병합하지 말고 git fetch을 사용하십시오. 당신이 푸시 --force를 사용할 수없는 경우 내가 필요로 무엇을 할 수있는 방법을 발견했다

1

시도 할 수있는 트릭이 있습니다.

git push origin :master 

이렇게하면 master라는 지사를 효과적으로 삭제합니다. 좋은 점은, 당신은 그렇게 할 수있는 권한이 필요 없다는 것입니다.

가입 한 후에는 그냥 저장소에 정확히 마스터 분기를 다시합니다

git push origin master:master 

이 작업을 수행 할 수 있습니다.

충돌/병합을 처리 할 필요가 없습니다. 사용하지 않는 것이 좋습니다 (당신을 제외하고는 쉬운 방법입니다).

트릭을 사용하면이 개발자가 작성한 모든 커밋을 제거 할 수 있습니다 (전혀 추적 할 수 없음).


은 할 수있는 "일반적인"방법이 있습니다 :

  • 분기
  • 가 되돌립니다 분기
  • 밀어 상단의 결함이 커밋 되돌리기를 가져 오기를
  • Rebase 현재 지사에서의 당신의 작업
+0

슬프게도, 나의 힘내 주최자는 master 브랜치의 원격 삭제를 막고 있습니다. 그래서 이것은 제 경우에는 작동하지 않을 것입니다. – theduke

+0

아, 이상한데, 병합되지 않은 지점을 삭제할 수 있습니까? (귀하의 질문과 관련이 없으며 단지 호기심에서 벗어났습니다) –