2013-02-21 4 views
0

나는 꽤 많은 변경을 한 git 저장소를 가지고 있으며 원격 위치로 푸시되었습니다.git 저장소의 전체 재설정

처음부터 저장소를 3 커밋으로 재설정하고 원격 저장소로 밀어 넣으려고합니다.

  • 자식 재설정
  • 자식 밀어 원산지 마스터

동일한에 대한 의심의 몇 - : 나는 다음과 같은 일을 고려 중이 야?

  • 이것이 올바른 방법일까요?
  • 제 3 커밋 (첫 번째) 이후에 특정 파일을 삭제하고 몇 개의 파일을 추가했습니다. 그 모든 것을 3 차 커밋의 상태로 되돌리고 싶습니다 (삭제 된 파일을 되찾고 새로 추가 된 파일을 제거하십시오). 어떻게 그 일을 할 수 있을까요?

감사합니다.

[편집] 저는 현재이 프로젝트의 독창적 인 개발자입니다. 또한 꽤 많은 커밋이 있기 때문에 이드는 수동으로 각각의 것을 되 돌리지 않아도됩니다.

답변

1

파일을 원격 저장소에 이미 보냈으므로 다른 개발자가 로컬 저장소를 업데이트하고 새 업데이트를 받아야하기 때문에 git reset을 수행하는 것은 좋지 않습니다. 가장 좋은 해결책은 git revert 명령을 수행하는 것입니다.이 커맨드는 이전 커밋과 같은 새로운 커밋을 생성합니다. 자세한 내용은 link을 참조하십시오.

하지만이 프로젝트의 유일한 개발자 인 경우 커밋을 삭제할 수 있습니다. 이를 위해, 당신은 git reset 명령을 사용할 수 있습니다

해시 반환 할 커밋 해시가
git reset --hard hash 

. 옵션 --hard은 전달한 커밋 해시를 완료 한 후 커밋을 거의 완료하는 것입니다.

프로젝트 기록을 변경하면서 간단한 push을 수행 할 수 없습니다.

git push -f origin master 

그러나 일부 원격 저장소가 역사를 업데이트 강제로 당신을 금지 일부 hook을 가지고 : 당신은 업데이트를 강제로 -f 플래그가 필요합니다. 히스토리 갱신을 수행하려면이 훅을 삭제해야합니다. 이 작업을 수행 할 수 없으면 git revert 명령을 사용해야합니다.

+0

감사합니다. 나는이 정보를 가지고이 이전의 문제는 언급하지 않았지만 다음과 같이 언급했습니다. 나는이 시점에서 유일한 개발자이며, 꽤 많은 복귀가 이루어져서 샷. 제안 할만한 옵션이 있습니까? –

+0

답변이 업데이트되었습니다. –

1

당신은 다시 모든 파일을 얻을 수

git reset --hard <3rd commit> 

을 사용하고 새로 사람을 추가 제거 할 수 있습니다.

나서

git push -f origin master 

원격 업데이트 강제로 사용한다.

+0

나는이 방법을 시도 할 때이 메시지를받는 것처럼 보입니다. http://dpaste.com/960297/ –

+0

"git pull --rebase"는 내가 가진 변경 사항을 가져올 수있는 대부분의 장소에서 제안 된 것 같습니다. 방금 삭제되었습니다. –

+0

@uki'receive.denyNonFastForwards'를'true'로 설정 했습니까?'git push -f'를 거부합니다. – pktangyue

관련 문제