2017-09-30 2 views
0

J'ai cloné un référentiel et effectué quelques modifications locales.Comment annuler une commande de sous-module validé

Puis j'ai fait un git pull origin pour obtenir les changements mis à jour de l'origine. Je fais ensuite un git push pour pousser vers mon dépôt cloné. Cependant, les sous-modules ne sont pas poussés:

Changes not staged for commit: 
    (use "git add <file>..." to update what will be committed) 
    (use "git checkout -- <file>..." to discard changes in working directory) 

    typechange: third_party/aten (new commits) 
    modified: third_party/cub (new commits) 
    modified: third_party/eigen (new commits) 
    modified: third_party/gloo (new commits) 
    modified: third_party/nccl (new commits) 

Je ne savais pas que je pouvais utiliser git submodule update pour les mettre à jour. Je les ai ajoutés, validés et poussés vers mon dépôt cloné.

Ceci est faux. Mon référentiel cloné est en retard sur l'origine. Maintenant, j'ai une demande de traction à l'origine et cette validation est incluse.

Je me demande s'il existe un moyen facile d'annuler cela. Pour forcer mon référentiel cloné à utiliser la même version que l'origine.

Merci beaucoup!

Répondre

1

Si vous avez commis seulement les changements de sous-module dans votre dernier commit alors, Undo (hard reset) le dernier commit alors, la force poussée à distance (repo clonée)

$ git reset --hard HEAD~1  # undo the last commit 
$ git push -f 

façon alternative pour annuler les modifications de sous-module :

"Il est pas le dernier commit que d'avoir cette question" (mentionné dans un commentaire)

Extrayez le sous-dossier sous-module uniquement vers un commit spécifique ou remote branch où les modifications du dossier ne sont pas validées.

$ git fetch 
$ git checkout <remote>/<branch> -- <submodule-folder> 

Or, 
$ git log  # copy the commit hash want to get back the submodule folder 
$ git checkout <commit-hash> -- <submodule-folder> 

"Pour forcer mon dépôt cloné à utiliser la même version que l'origine."

Ici, je suppose que origin = upstream (d'où vous Clonage du repo). Ainsi, vous pouvez tirer les changements de upstream puis pousser à la branche repo clonée.

$ git remote add upstream <upstream repo url> # add a new remote with the original repo url 

$ git pull upstream master  # pull the upstream master branch changes into local branch 
$ git push      # update remote branch 

Maintenant, le repo cloné est mis à jour avec le référentiel d'origine (en amont).

+0

Merci pour votre suggestion. Ce n'est pas le dernier commit que d'avoir ce problème, il y a beaucoup de commits avant. Je suppose que votre suggestion perdrait tous les commits afterwords. Existe-t-il un moyen de changer uniquement la version du sous-module mais de laisser tous les autres commits intacts? Merci. – Fei

+0

ok alors, une façon est de rétablir le commit ayant le problème 'git revert '. L'autre façon consiste à vérifier le dossier sous-module uniquement à un commit spécifique 'git checkout remote/branch - '. –

+0

Merci. J'ai utilisé 'git chdeckout remote/branch - ' et il a retiré les dernières modifications de la télécommande. – Fei