변경 내용을 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
'programing' 카테고리의 다른 글
JavaScript에서 페이지가 유효한지 확인 - ASP.NET (0) | 2023.06.07 |
---|---|
아름다운 수프와 스크레이피 크롤러의 차이점은 무엇입니까? (0) | 2023.06.07 |
AVD Manager - Android 가상 장치를 만들 수 없습니다. (0) | 2023.06.07 |
excel의 vba에서 유니코드 문자열 (0) | 2023.06.07 |
Visual Studio 2008에서 JavaScript/jQuery Intellisense를 작동하려면 어떻게 해야 합니까? (0) | 2023.06.07 |