변경 사항을 git 서브 모듈로 되돌리려면 어떻게해야합니까? 추가 한 git 서브 모듈

리포지토리에 추가 한 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”를 다시 실행하십시오.