Je tire une branche dans master
afin de la fusionner.
La commande que j’exécute est (avec master
extrait): git pull Origin feature/some_branch
Malheureusement, il semblerait que mes collègues aient effectué des suppressions de fichiers (ce que je penserais comme étant bénins), et maintenant, Git lance un error: unable to unlink old 'somefile': No such file or directory
.
J'ai essayé de regarder en ligne, mais la plupart des références de cette erreur concernent les autorisations, ce qui n'est pas le cas ici.
Le fichier en question est pas présent sur le maître avant la fusion, alors qu'il l'est dans la nouvelle branche.
Le problème est que master
n'a pas été mis à jour depuis longtemps, il y a donc trop de modifications et de fichiers affectés pour que je puisse commencer à comprendre le code.
J'ai simplement besoin de master
pour contenir tous les changements apportés par la nouvelle branche. Nous ne commettons jamais rien directement dans master
, toujours par fusions.
Ce que j'ai essayé jusqu'à présent:
--force
, même problèmegit reset Origin/master --hard
et relancer la pull
, même problème Comment puis-je mettre à jour master
avec une autre branche plus récente sans prendre en compte de tels problèmes et en conservant son historique?
J'ai juste besoin de maître pour contenir tous les changements apportés par la nouvelle branche.
Vous pouvez ensuite forcer la fusion afin de refléter le contenu de cette branche feature/some_branch
.
Mais au lieu d'utiliser merge --ours master
, vous pouvez utiliser une idée similar , qui conserve l'historique de premier parent
git checkout master
# make merge commit but without conflicts!!
# the contents of 'ours' will be discarded later
git merge -s ours feature/some_branch
# make temporary branch to merged commit
git branch tmp
# get contents of working tree and index to the one of feature/some_branch
git reset --hard feature/some_branch
# reset to our merged commit but
# keep contents of working tree and index
git reset --soft tmp
# change the contents of the merged commit
# with the contents of feature/some_branch
git commit --amend
# get rid off our temporary branch
git branch -D tmp
# verify that the merge commit contains only contents of feature/some_branch
git diff HEAD feature/some_branch
Pour remplacer votre branche master
par la version sur Origin/master
, vous pouvez essayer de la supprimer et de la recréer. Il n'est pas nécessaire d'extraire master
pendant cette opération, vous pourrez ainsi éviter les erreurs liées à la modification de votre répertoire de travail.
Commencez par vérifier une autre branche que vous pouvez vérifier:
git checkout feature/some-branch
Ensuite, supprimez votre branche master
locale et créez-la à nouveau, y compris ses informations de suivi:
git branch --delete master
git branch master Origin/master
git branch --set-upstream-to=Origin/master master
Enfin, essayez de passer à la nouvelle master
:
git branch checkout master