J'ai fait un git stash pop
et je me suis retrouvé avec des conflits de fusion. J'ai supprimé les fichiers du système de fichiers et j'ai fait git checkout
comme indiqué ci-dessous, mais il pense que les fichiers ne sont toujours pas fusionnés. J'ai ensuite essayé de remplacer les fichiers et de git checkout
refaire le même résultat. J'ai essayé de le forcer avec le -f
drapeau. Toute aide serait appréciée!
chirag-patels-macbook-pro:haloror patelc75$ git status
app/views/layouts/_choose_patient.html.erb: needs merge
app/views/layouts/_links.html.erb: needs merge
# On branch prod-temp
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: db/schema.rb
#
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# unmerged: app/views/layouts/_choose_patient.html.erb
# unmerged: app/views/layouts/_links.html.erb
chirag-patels-macbook-pro:haloror patelc75$ git checkout app/views/layouts/_choose_patient.html.erb
error: path 'app/views/layouts/_choose_patient.html.erb' is unmerged
chirag-patels-macbook-pro:haloror patelc75$ git checkout -f app/views/layouts/_choose_patient.html.erb
warning: path 'app/views/layouts/_choose_patient.html.erb' is unmerged
git
git-stash
git-checkout
Chirag Patel
la source
la source
git stash apply/pop
devrait être plus facile avec Git 2.5 (Q2 2015), car l'arborescence de travail doit maintenant être propre: voir ma réponse ciRéponses:
Voir man git merge ( COMMENT RÉSOUDRE LES CONFLITS ):
Et sous TRUE MERGE (pour voir à quoi se réfèrent 2. et 3.):
Donc: utilisez
git reset --hard
si vous souhaitez supprimer les modifications de cachette de votre arborescence de travail, ougit reset
si vous voulez simplement nettoyer l'index et laisser les conflits dans votre arborescence de travail fusionner à la main.Sous man git stash ( OPTIONS, pop ) vous pouvez lire en plus:
la source
Une chose similaire m'est arrivée. Je ne voulais pas mettre en scène les fichiers pour l'instant, alors je les ai ajoutés avec
git add
, puis je l'ai faitgit reset
. Cela a simplement ajouté puis supprimé mes modifications, mais a effacé les chemins non fusionnés.la source
reset --hard
car il n'écrase pas vos fichiers (sauf ceux avec des problèmes de fusion). Merci!add
scène le contenu de l'arborescence de travail vers l'index? Je ne pense pas comprendre pourquoi votre réponse fonctionne à partir de la description.git add
les met en scène maisgit reset
, ce que je fais immédiatement après, les met en scène. Essentiellement, il efface les chemins non fusionnés et me ramène à mon arbre de travail normal en simulant git out.git add
si vous le souhaitezgit reset
. Legit reset
"défait" effectivement legit add
.git reset
(--mixed
<- par défaut) ne touche effectivement pas le répertoire de travail, donc exactement ce qui était dans votre répertoire de travail, les conflits de fusion et tout, sont laissés seuls. L'index (et techniquement la tête de branche) est cependant réinitialisé (sans référence, ils sont réinitialisésHEAD
, ce qui signifie probablement aucun changement pour la tête de branche, et annule efficacement tout ce qui a étégit add
fait pour l'index, ainsi que l'effacement de l'état des chemins non fusionnés) .git reset
etgit stash drop
fonctionne bien. Il fait cegit stash pop
qu'il aurait fait sans conflits. Il semble que cegit add
n'est pas nécessaire; bien que cela puisse être utile, vous avez de nombreux fichiers avec des conflits. Au fur et à mesure que chacun est résolu , ils peuvent être ajoutés et lesgit status
garder en trace.Si, comme moi, ce que vous voulez habituellement, c'est remplacer le contenu du répertoire de travail par celui des fichiers cachés et que vous obtenez toujours un conflit, alors ce que vous voulez, c'est résoudre le conflit à l'aide
git checkout --theirs -- .
de la racine.Après cela, vous pouvez
git reset
apporter toutes les modifications de l'index au répertoire de travail, car apparemment en cas de conflit, les modifications apportées aux fichiers non en conflit restent dans l'index.Vous pouvez également vouloir exécuter
git stash drop [<stash name>]
après, pour vous débarrasser de la cachette, cargit stash pop
ne la supprimez pas en cas de conflits.la source
Notez que
Git 2.5 (T2 2015)un futur Git pourrait essayer de rendre ce scénario impossible.Voir commit ed178ef par Jeff King (
peff
), 22 avril 2015.(Fusionné par Junio C Hamano -
gitster
- dans commit 05c3967 , 19 mai 2015)Remarque: cela a été annulé. Voir ci-dessous .
Problème
En d'autres termes:
Solution
Voir commit 1937610 (15 juin 2015) et commit ed178ef (22 avril 2015) par Jeff King (
peff
) .(Fusionné par Junio C Hamano -
gitster
- dans commit bfb539b , 24 juin 2015)la source