453 Stimmen

Wie kann ich meine Änderungen an einem Git-Submodul rückgängig machen?

Ich habe ein Git-Submodul (RestKit), die ich zu meinem Repo hinzugefügt haben.

Ich habe dort versehentlich einige Dateien geändert und würde gerne zur Ausgangsversion zurückkehren. Um das zu tun, habe ich versucht, Folgendes auszuführen

Mac:app-ios user$ git submodule update RestKit

Aber wie Sie hier sehen können, hat dies nicht funktioniert, da es sich immer noch um "geänderte Inhalte" handelt:

Mac:app-ios user$ git status
...
#   modified:   RestKit (modified content)

Sogar

Mac:app-ios user$ git submodule update -f RestKit 

macht lokal geänderte Dateien nicht rückgängig.
Wie kann ich den Inhalt dieses Submoduls zurücksetzen?

7voto

cmcginty Punkte 106764

Für Git <= 2.13 sollten diese beiden Befehle zusammen Ihre Repos mit rekursiven Submodulen zurücksetzen:

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

5voto

Feiyu Zhou Punkte 3761

Wenn es Änderungen in Ihren Submodulen gibt, dann verwenden Sie

git submodule foreach --recursive git reset --hard

Wenn es sich bei Ihren Änderungen um Änderungen an entfernten Submodulen handelt, dann verwenden Sie

git submodule update --init

Wenn diese Änderungen festgeschrieben wurden, dann verwenden Sie

git reset --hard
git submodule update --init

4voto

alex_1948511 Punkte 4237

Mein Weg zum Zurücksetzen aller Submodule ( ohne Ablösen & Behalten ihrer master Zweig):

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

3voto

David H. Punkte 329

Dies funktioniert mit unseren Bibliotheken unter GIT v1.7.1, wo wir ein DEV-Paket-Repositorium und ein LIVE-Paket-Repositorium haben. Die Repositories selbst sind nichts anderes als eine Shell, um die Assets für ein Projekt zu verpacken. alle Submodule.

LIVE wird nie absichtlich aktualisiert, es kann jedoch zu Cache-Dateien oder Unfällen kommen, die das Repository verschmutzen. Neue Untermodule, die zu DEV hinzugefügt werden, müssen auch in LIVE initialisiert werden.

Paket-Repository in DEV

Hier wollen wir alle Upstream-Änderungen ziehen, die uns noch nicht bekannt sind, dann werden wir unser Paket-Repository aktualisieren.

# 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   

Paket-Repository in LIVE

Hier wollen wir die Änderungen ziehen, die in das DEV-Repository übertragen wurden, aber keine unbekannten Upstream-Änderungen.

# Pull changes
git pull

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

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X