리포지토리에 추가 한 git 서브 모듈 (RestKit)이 있습니다.
실수로 일부 파일을 변경했으며 소스 버전으로 돌아가고 싶습니다. 그렇게하기 위해, 나는 달리려고 노력했다.
Mac:app-ios user$ git submodule update RestKit
그러나 여기서 볼 수 있듯이 여전히 “수정 된 내용”이므로 작동하지 않았습니다.
Mac:app-ios user$ git status
...
# modified: RestKit (modified content)
조차
Mac:app-ios user$ git submodule update -f RestKit
로컬로 수정 된 파일을 되 돌리지 않습니다.
해당 서브 모듈의 내용을 어떻게 재설정합니까?
답변
서브 모듈의 디렉토리로 이동 한 다음 git reset --hard
모든 수정 된 파일을 마지막 커밋 된 상태로 재설정 하려면를 수행하십시오 . 커밋되지 않은 모든 변경 사항은 삭제됩니다.
답변
디렉토리를 변경하지 않고 모든 하위 모듈에 대해이 작업을 수행하려는 경우 수행 할 수 있습니다
git submodule foreach git reset --hard
재귀 플래그를 사용하여 모든 하위 모듈에 적용 할 수도 있습니다.
git submodule foreach --recursive git reset --hard
답변
이전의 모든 답변보다 더 안전한 방법입니다.
git submodule deinit -f .
git submodule update --init
첫 번째 명령은 모든 하위 모듈을 완전히 “바인드 해제”하고 두 번째 명령은 새로 검사합니다.
다른 방법보다 시간이 오래 걸리지 만 하위 모듈의 상태에 관계없이 작동합니다.
답변
글쎄, 나를 위해
git reset --hard
메인의 repo 참조 커밋 / 상태가 필요하지 않은 서브 모듈을 체크 아웃 한 상태로 재설정하기 만하면됩니다. 나는 여전히 OP와 같은 “수정 된 내용”을 가질 것이라고 말했다. 따라서 서브 모듈을 올바른 커밋으로 되돌리려면 다음을 실행하십시오.
git submodule update --init
그런 다음 git status
하위 모듈에서 깨끗합니다.
답변
4 단계를 순차적으로 수행하십시오.
git submodule foreach git reset --hard HEAD
git submodule update
git submodule foreach "git checkout master; git pull"
git submodule foreach git clean -f
답변
하위 모듈로 재귀 적으로 포함하여 저에게 효과적이었습니다 (아마도 -f가 작동하지 않아 하위 모듈 내부의 하위 모듈을 변경했을 수 있습니다).
git submodule update -f --recursive
답변
다른 사람들이 말했듯이 먼저 이것을 시도하십시오.
git submodule update --init
그래도 작동하지 않으면 서브 모듈 디렉토리로 변경하고 다음 명령을 사용하여 서브 모듈에 변경 사항이 있는지 확인하십시오.
git status
서브 모듈에 변경 사항이 있으면 제거하십시오. “git status”를 실행할 때 변경 사항이 보이지 않는지 확인하십시오.
다음으로 메인 리포지토리로 돌아가서 “git submodule update –init”를 다시 실행하십시오.