web-dev-qa-db-fra.com

Erreur: Impossible d'extraire avec la base: vous avez des modifications non mises en scène.

J'ai commencé à collaborer avec quelques amis sur un projet utilisant le référentiel heroku git.

J'ai cloné le référentiel il y a quelques jours et ils ont depuis apporté des modifications, j'essaie donc d'obtenir les dernières mises à jour.

J'ai exécuté la commande git pull --rebase comme indiqué ici (est-ce la bonne façon de le faire?): https://devcenter.heroku.com/articles/sharing#merging-code-changes

Je reçois l'erreur suivante:

$ git pull --rebase
Cannot pull with rebase: You have unstaged changes.
Please commit or stash them.

J'imagine que j'ai manipulé le code et qu'il souhaite maintenant que je commette ou que je supprime (est-ce que ça veut dire stash?) Les changements. Est-ce ce qui se passe? Si tel est le cas, j'aimerais supprimer les modifications que j'ai apportées et obtenir simplement le code mis à jour à partir du référentiel git.

Une idée de ce que je peux faire?

119
user3597950

Do git status, cela vous indiquera quels fichiers ont été modifiés. Comme vous avez indiqué que vous ne souhaitiez pas conserver les modifications, vous pouvez effectuer git checkout -- <file name> ou git reset --hard pour supprimer les modifications.

Pour la plupart, git vous dira quoi faire à propos des changements. Par exemple, votre message d'erreur a indiqué à git stash vos modifications. Ce serait si vous vouliez les garder. Après avoir tiré, vous feriez git stash pop et vos modifications seraient réappliquées.

git status a également comment se débarrasser des modifications selon que le fichier est mis en scène pour validation ou non.

152
Schleis

Si vous souhaitez conserver vos modifications de travail tout en effectuant une modification de base, vous pouvez utiliser --autostash. De la documentation :

Avant de commencer rebase, cachez les modifications locales (voir git-stash [1] ) si nécessaire, et appliquez le stash à la fin.

Par exemple:

git pull --rebase --autostash
51
mkobit

Tirer avec rebase est une bonne pratique en général.

Cependant, vous ne pouvez pas le faire si votre index n’est pas propre, c’est-à-dire que vous avez apporté des modifications qui n’ont pas été validées.

Vous pouvez le faire pour contourner le problème, en supposant que vous souhaitiez conserver vos modifications:

  1. cachez vos modifications avec: git stash
  2. tirer du maître avec rebase
  3. réappliquez les modifications que vous avez stockées dans (1) avec: git stash apply stash@{0} ou le plus simple git stash pop
48
Kostas Rousis

Commencez par un git status

Voyez si vous avez des modifications en attente. Pour les jeter, lancez

git reset --hard
26
Igal S.

Cela fonctionne pour moi:

git fetch
git rebase --autostash FETCH_HEAD
12
CppChase

Tu peux toujours faire

git fetch && git merge --ff-only Origin/master

et vous obtiendrez soit (a) aucun changement si vous avez des modifications non validées en conflit avec les modifications en amont, soit (b) le même effet que stash/pull/apply: un rebase pour vous mettre sur les dernières modifications de HEAD et vos modifications non validées sont laissées telles quelles.

9
Jared Updike

Lorsque la modification non mise en place est due au fait que git tente de corriger les conventions eol sur un fichier (comme c'est toujours mon cas), aucune quantité de stockage, d'extraction ou de réinitialisation ne le fera disparaître.

Cependant, si l'intention est vraiment de modifier la base et d'ignorer les modifications non mises en scène, alors ce que je fais est de supprimer la branche localement, puis de la récupérer à nouveau.

git checkout -f anyotherbranchthanthisone
git branch -D thebranchineedtorebase
git checkout thebranchineedtorebase

Voila! Il ne m'a pas encore échoué.

4
tggagne