Mon scénario a:J'ai fait un git svn dcommit avant un pull - comment puis-je réparer mon repo?
- Mon git-machine locale repo
- Une télécommande sur GitHub
- Un serveur SVN sur le réseau local
Le serveur SVN est encore canonique, mais est maintenu en parité avec le repo GitHub. Les autres utilisateurs utilisent exclusivement SVN, et je suis le seul utilisateur git + SVN (ce qui simplifie les choses).
Lorsque je travaille sur d'autres ordinateurs (par exemple, mon ordinateur portable, à la maison, à l'étranger), j'utilise git et je pousse/tire mes commits avec le repo GitHub. Mes commits ne sont pas mis dans SVN jusqu'à ce que je sois au bureau.
Quand je suis au bureau, je vais faire un git pull
pour faire en toute nouvelle commits de GitHub puis faire git svn dcommit
, suivi d'un retour à git push -f
GitHub de sorte que le nouveau annoté SVN canon engage sur GitHub et devenir correspondance SVN parfaitement.
Cependant, aujourd'hui, j'avais des validations en attente sur mon ordinateur de bureau - mais j'avais aussi des commits non-tirés - et je ne sais pas comment le réparer.
À 9 heures ce matin, avant d'exécuter toute anyhere commandes, mes mises en pension ressemblait à ceci:
o = Normal Git commit, lacking SVN annotation
* = SVN-annotated Git commit
GitHub
*---*---*---*---o---o---o---o---o
A B C D E F G H I
Local computer git repo
*---*---*---*---o---o
A B C D E F
SVN
*---*---*---*
A B C D
Explication: J'ai eu deux commits, E
et F
qui étaient dans mon repo informatique local qui ont déjà été tirés de GitHub, ces commits n'étaient pas encore dcommit
'd à SVN.
J'ai fait une erreur ce matin en ce que j'ai immédiatement couru git svn dcommit
sur mon ordinateur local sans d'abord courir git pull
. L'exécution git svn dcommit
a causé les prises en pension pour entrer dans cet état:
GitHub
*---*---*---*---o---o---o---o---o
A B C D E F G H I
Local computer git repo
*---*---*---*---*---*
A B C D E' F'
SVN
*---*---*---*---*---*
A B C D E' F'
Notez que E
et F
sont maintenant E'
et F'
parce qu'ils ont été modifiés par git svn
être un SVN annotées commit (il a un autre commettras hachage, même si elle représente le même état de base de code). Mon E
original et F
restent inchangés dans GitHub.
Mon ordinateur fait un git fetch
en arrière-plan de toute façon, donc j'ai maintenant le GitHub engage E
par I
sur mon ordinateur, et GitKraken me montre que j'ai maintenant des branches côte à côte divergeant engager après D
:
Local computer git repo:
*---*---*---*---*---* (master)
A B C D E' F'
\
\-o---o---o---o---o (remote-master)
E F G H I
Comment puis-je résoudre ce problème? (Comme les commits annotés par Git-SVN sont effectivement immuables).
Je pense que ce que je veux faire est Reparent G
après F'
et ainsi ignorer E
et F
, puis exécutez git svn dcommit
puis faire un retour à git push -f
GitHub.
...problème est, je ne sais pas comment réparer G
- Je regarde des commandes comme cherrypick
mais cela ne semble pas être ce que je suis après, et GitKraken ne me laisse pas rebase
(ce n'est pas un menu option pour n'importe quoi dans la branche remote-master
).