git stash gaffe: git stash pop et qui a abouti à des conflits de fusion
J'ai fait un git stash pop
et a fini avec des conflits de fusion. J'ai supprimé les fichiers à partir du système de fichiers et fait un git checkout
comme indiqué ci-dessous, mais il pense que les fichiers sont toujours dissociées. J'ai ensuite essayé de remplacer les fichiers et git checkout
de nouveau et même résultat. J'ai tenté de forcer avec -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
- Remarque: la restauration de l'etat avant l'
git stash apply/pop
devrait être plus facile avec Git 2.5 (T2 2015), depuis l'arbre de travail doit maintenant être propre: voir ma réponse ci-dessous
Vous devez vous connecter pour publier un commentaire.
Voir l'homme git merge (COMMENT RÉSOUDRE les CONFLITS):
Et sous VÉRITABLE FUSION (pour voir ce que 2. et 3. renvoie):
Donc: utiliser
git reset --hard
si vous souhaitez supprimer la cachette des changements de votre arbre de travail, ougit reset
si vous voulez juste pour nettoyer l'index et de laisser les conflits dans votre arbre de travail pour fusionner à la main.Sous l'homme git stash (OPTIONS, pop) vous pouvez lire en plus:
J'ai eu la même chose m'est arrivé. Je n'ai pas envie de mettre en scène les fichiers pour l'instant j'ai donc ajouté avec
git add
et puis il suffit de negit reset
. Fondamentalement venez d'ajouter, puis unstaged mes modifications, mais effacé la dissociées des chemins.reset --hard
car elle permet de ne pas écraser vos fichiers (à l'exception de ceux avec des problèmes de fusion). Merci!add
le contenu du stage à partir de l'arbre de travail à l'index? Je ne pense pas que je comprends pourquoi votre réponse œuvres de la description.git add
ne scène, maisgit reset
, ce que je fais immédiatement après, unstages eux. Essentiellement, il efface le dissociées des chemins et me renvoie à mon travail normal de l'arbre par faking git out.git add
si vous allezgit reset
. Legit reset
efficacement "annule" lagit add
.git reset
(--mixed
<- par défaut) de ne pas toucher le répertoire de travail donc exactement ce qui est dans votre répertoire de travail, les conflits de fusion et de tous les, sont laissés seuls. L'indice (et techniquement, le chef de la direction générale) est remis à zéro si (sans réf ils obtiennent remettre àHEAD
, ce qui signifie probablement pas de changement pour le chef de la direction générale, et annule toutegit add
fait à l'index, ainsi que l'effacement de la non fusionné les chemins de l'état).git reset
etgit stash drop
fonctionne bien. C'est cegit stash pop
l'aurait fait sans conflits. Il semble que lesgit add
n'est pas nécessaire; toutefois, il peut-être utile, vous avez de nombreux fichiers à des conflits. Comme chaque résolu, ils peuvent être ajoutés etgit status
assure le suivi de leur.Si, comme moi, de ce que vous voulez généralement est de remplacer le contenu du répertoire de travail avec le planqué des fichiers, et vous obtenez toujours un conflit, alors ce que vous voulez est de résoudre le conflit à l'aide de
git checkout --theirs -- .
à partir de la racine.Après cela, vous pouvez
git reset
d'apporter toutes les modifications à partir de l'index du répertoire de travail, puisque, apparemment, en cas de conflit, les modifications non en situation de conflit fichiers de rester dans l'index.Vous pouvez également exécuter
git stash drop [<stash name>]
par la suite, pour se débarrasser de la cachette, parce quegit stash pop
ne pas le supprimer en cas de conflits.Notez que
Git 2.5 (T2 2015)un avenir Git peut essayer de faire que le scénario impossible.Voir s'engager ed178ef par Jeff King (
peff
), le 22 Avril 2015.(Fusionnés par Junio C Hamano --
gitster
-- dans s'engager 05c3967, 19 Mai 2015)Remarque: Cela a été annulé. Voir ci-dessous.
Problème
En d'autres termes:
Solution
Voir s'engager 1937610 (15 Juin 2015), et s'engager ed178ef (22 Avril 2015) par Jeff King (
peff
).(Fusionnés par Junio C Hamano --
gitster
-- dans s'engager bfb539b, 24 Juin 2015)