programing

변경 내용을 Git 하위 모듈로 되돌리려면 어떻게 해야 합니까?

padding 2023. 6. 7. 22:11
반응형

변경 내용을 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 submodule deinit -f .
git submodule update --init

첫 번째 명령은 모든 하위 모듈을 완전히 "바인딩 해제"한 다음 두 번째 명령을 새로 체크아웃합니다.
다른 방법보다 시간이 오래 걸리지만 하위 모듈의 상태에 상관없이 작동합니다.

디렉터리를 변경하지 않고 모든 하위 모듈에 대해 이 작업을 수행하려면

git submodule foreach git reset --hard

재귀 플래그를 사용하여 모든 하위 모듈에 적용할 수도 있습니다.

git submodule foreach --recursive git reset --hard

후, "Description"을 합니다.git reset --hard모든 수정된 파일을 마지막으로 커밋된 상태로 재설정합니다.이렇게 하면 커밋되지 않은 모든 변경 사항이 삭제됩니다.

음, 저는, 가지고 있습니다.

git reset --hard

메인의 참조된 커밋/상태가 아닌 체크아웃된 상태로 서브모듈을 재설정하기만 하면 됩니다.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 restore . --recurse-submodules

이렇게 하면 모든 로컬 변경사항(저장소 및 모든 하위 모듈)만 실행 취소됩니다.

그렇지만git reset ...하며 target-commit-id를 이동할 수 .HEAD어떤 약속이라도

다른 사람들이 말한 것처럼 먼저 시도해 보십시오.

git submodule update --init

그래도 작동하지 않으면 하위 모듈 디렉터리로 변경하고 다음 명령을 사용하여 하위 모듈에 변경 사항이 있는지 확인합니다.

git status

서브모듈에 변경사항이 있으면 삭제합니다."git status"를 실행할 때 변경 내용이 표시되지 않는지 확인합니다.

그런 다음 기본 리포지토리로 돌아가 "git submodule update --init"를 다시 실행합니다.

Git 2.14 (2017년 3분기) 이후, 당신은 각 서브모듈에 들어가서 작업을 할 필요가 없습니다.git reset(의 경우와 같이)git submodule foreach git reset --hard)

이제 Git reset 자체가 하위 모듈로 재귀적으로 이동하는 방법을 알고 있기 때문입니다.

커밋 35b96d1(2017년 4월 21일)을 참조하고, 커밋 f2d4899, 커밋 823bab0, 커밋 cd279e2(2017년 4월 18일)를 스테판 벨러()stefanbeller가 참조.
(주니오 C 하마노에 의해 합병 -- -- 2017년 5월 29일 커밋 5f074ca에서)

기본 제공/제공: 추가 --sysse-modules 스위치

git-reset서브모듈에 대해 가르쳐야 하는 또 다른 작동 트리 조작기입니다.

사용자가 git-reset을 사용하고 하위 모듈에 다시 삽입하도록 요청하면 하위 모듈이 슈퍼 프로젝트에 기록된 대로 객체 이름으로 재설정되어 HEAD가 분리됩니다.

경고: 차이:

  • git reset --hard --recurse-submodule그리고.
  • git submodule foreach git reset --hard

즉, 전자는 기본 부모 복원 작업 트리도 재설정합니다. 후자는 하위 모듈 작업 트리만 재설정합니다.
따라서 주의해서 사용하십시오.

단순합니다.

cd /path/to/submodule/root
git submodule update -f --init  .

대부분의 답변은 모든 하위 모듈을 재설정할 것을 제안하고 있으며, 이는 합법적인 변경 사항이 있을 수 있기 때문에 최선의 방법이 아니라고 생각합니다.

git <= 2.13의 경우 이 두 명령을 결합하면 재귀 하위 모듈을 사용하여 저장소를 재설정해야 합니다.

git submodule foreach --recursive git reset --hard
git submodule update --recursive --init

하위 모듈에 변경 사항이 있는 경우

git submodule foreach --recursive git reset --hard

변경 사항이 원격 하위 모듈 변경 사항인 경우

git submodule update --init

이러한 변경이 커밋된 경우 다음을 사용합니다.

git reset --hard
git submodule update --init

모든 하위 모듈을 재설정하는 방법(분리 및 보관하지 않고)master분기):

git submodule foreach 'git checkout master && git reset --hard $sha1'

이것은 GIT v1.7.1을 실행하는 라이브러리와 함께 작동하며, 여기서 DEV 패키지 repo 및 LIVE 패키지 repo가 있습니다.저장소 자체는 프로젝트를 위한 자산을 패키지화하기 위한 셸에 불과합니다.모든 서브모듈

라이브는 의도적으로 업데이트되지 않지만 캐시 파일이나 사고가 발생하여 레포가 더러워질 수 있습니다.DEV에 추가된 새 하위 모듈도 LIVE 내에서 초기화해야 합니다.

DEV의 패키지 저장소

여기서는 아직 인식하지 못하는 모든 업스트림 변경사항을 풀한 다음 패키지 저장소를 업데이트합니다.

# Recursively reset to the last HEAD
git submodule foreach --recursive git reset --hard

# Recursively cleanup all files and directories
git submodule foreach --recursive git clean -fd

# Recursively pull the upstream master
git submodule foreach --recursive git pull origin master

# Add / Commit / Push all updates to the package repo
git add .
git commit -m "Updates submodules"
git push   

라이브의 패키지 저장소

여기서는 DEV 저장소에 커밋된 변경 사항을 풀하지만 업스트림 변경 사항은 알 수 없습니다.

# Pull changes
git pull

# Pull status (this is required for the submodule update to work)
git status

# Initialize / Update 
git submodule update --init --recursive

언급URL : https://stackoverflow.com/questions/10906554/how-do-i-revert-my-changes-to-a-git-submodule

반응형