J'ai une branche git (appelée v4), qui a été créée à partir de master hier. Il y a eu quelques changements à maîtriser, que je veux entrer dans la v4. Donc, dans la v4, j'ai essayé de faire un rebase à partir de master, et un fichier n'arrête pas de bousiller les choses: un fichier texte d'une ligne, qui contient le numéro de version. Ce fichier est app/views/common/version.txt
, qui avant le rebasage contient ce texte:
v1.4-alpha-02
Voici ce que je fais:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
Le version.txt
ressemble maintenant à ceci:
<<<<<<< HEAD:app/views/common/version.txt
v1.4-alpha-02
=======
v1.4-alpha-01
>>>>>>> new version, new branch:app/views/common/version.txt
Alors, je le range et ça ressemble à ceci maintenant:
v1.4-alpha-02
puis j'ai essayé de continuer: au début j'essaye un commit:
> git commit -a -m "merged"
# Not currently on any branch.
nothing to commit (working directory clean)
Pas de chance là-bas. Donc, j'essayais d'ajouter le fichier:
git add app/views/common/version.txt
Pas de réponse. Aucune nouvelle n'est une bonne nouvelle, je suppose. Alors, j'essaye de continuer:
> git rebase --continue
Applying: new version, new branch
No changes - did you forget to use 'git add'?
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
C'est à ce stade, après avoir tourné en rond avec ça, que je me cogne la tête du bureau.
Que se passe t-il ici? Qu'est-ce que je fais mal? Quelqu'un peut-il me remettre en ordre?
EDIT - pour unutbu
J'ai changé le fichier comme vous l'avez suggéré et j'obtiens la même erreur:
> git rebase master
First, rewinding head to replay your work on top of it...
Applying: new version, new branch
error: patch failed: app/views/common/version.txt:1
error: app/views/common/version.txt: patch does not apply
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging app/views/common/version.txt
CONFLICT (content): Merge conflict in app/views/common/version.txt
Failed to merge in the changes.
Patch failed at 0001 new version, new branch
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To restore the original branch and stop rebasing run "git rebase --abort".
git rebase master
et laissez-le échouer ; 2) puis vous éditezversion.txt
et faites comme il devrait regarder à ce point, et enregistrez l'édition; 3) puis vousgit add .../version.txt
; 4) alors vous faitesgit rebase --continue
( pas 'commit' )! S'ilrebase --continue
réussit ici, il est déjà validé (pas besoingit commit
ici!) - il ne reste donc plus qu'àgit push
(si vous utilisez un dépôt distant). J'espère que cela aide, si j'ai bien compris:)
- bravo!Réponses:
J'ai rencontré un problème similaire avec un rebase. Mon problème a été causé car l'un de mes commit n'a changé qu'un fichier, et lors de la résolution, j'ai annulé le changement introduit dans ce commit. J'ai pu résoudre mon problème en sautant le commit correspondant (
git rebase --skip
).Vous pouvez reproduire ce problème dans un référentiel de test. Créez d'abord le référentiel.
Puis validez le contenu original de
version.txt
in master.Créez la
v4
branche et modifiez le contenu deversion.txt
.Revenez à
master
et modifiez le contenu deversion.txt
pour qu'il y ait un conflit pendant le rebase.Revenez à la
v4
branche et essayez de rebaser. Il échoue avec un conflitversion.txt
comme prévu.Nous résolvons le conflit en sélectionnant le
master
contenu deversion.txt
. Nous ajoutons le fichier et essayons de continuer notre rebase.Il échoue ! Voyons quels changements
git
pensent qu'il y a dans notre référentiel.Ah ah, il n'y a pas de changement. Si vous avez lu en détail le message d'erreur précédent,
git
nous en avons informé et recommandé l'utilisationgit rebase --skip
. Il nous a dit: "S'il ne reste plus rien à mettre en scène, il y a des chances que quelque chose d'autre ait déjà introduit les mêmes changements; vous voudrez peut-être sauter ce patch." Nous sautons donc simplement le commit et le rebase réussit.Mise en garde : Note S'il vous plaît que
git rebase --skip
nous supprimons totalement commit qui agit
essayé de rebasage. Dans notre cas, cela devrait être correct cargit
se plaindre qu'il s'agit d'un commit vide. Si vous pensez avoir perdu les modifications une fois le rebase terminé, vous pouvez utilisergit reflog
pour obtenir l'ID de validation de votre référentiel avant le rebase, et l'utilisergit reset --hard
pour remettre votre dépôt dans cet état (c'est une autre opération destructive).la source
git rebase --skip
, vous ne sautez qu'un seul commit. J'émets généralement ungit status
avant de sauter un commit pour voir si je suis dans cette situation.rebase --skip
:).git reflog purge
ougit reflog delete
vous pouvez toujours récupérer vos modifications en utilisantgit reflog
. Essayez de récupérer les différents commit qui y sont référencés, l'un d'eux devrait être l'état de votre arbre avant de commencer le toutgit rebase
.Citant d'ici: http://wholemeal.co.nz/node/9
la source
Ce message d'erreur est le résultat de votre
git commit -a -m "merged"
. Si vous ne faites que réparer le fichier, exécutezgit add <file>
etgit rebase --continue
, cela devrait fonctionner correctement.git rebase --continue
essaie de faire une validation, mais constate qu'il n'y a pas de modifications en attente à valider (car vous les avez déjà validées).la source
git add <file>
ne résoudront pas le problème. rapportsgit rebase --continue
encoreNo changes - did you forget to use 'git add'?
Remplacez app / views / common / version.txt par
À ce stade du rebase, rappelez-vous que vous résolvez les conflits de fusion pour montrer la progression de la branche non maître .
Donc, en rebasant de
à
le conflit que vous résolvez concerne la création de A * sur la branche thématique.
Donc, après avoir fait
git rebase --abort
, les commandes devraient êtrela source
Le comportement que vous voyez n'est pas ce à quoi je m'attendrais d'un rebase typique avec juste ce conflit. Pensez à utiliser une branche distincte pour faire ce rebase (surtout si vous avez déjà poussé les commits à distance que vous avancez rapidement). En outre,
git mergetool
peut être utile pour résoudre les conflits et se souvenir d'émettre un fichiergit add
.Dans cet exemple minimal, le rebase fonctionne comme prévu. Pouvez-vous donner un exemple qui montre le comportement que vous observez?
la source
Voici quelques idées:
rm -rf .git/rebase-apply
la source