2009-11-24 10 views
4

Existe-t-il un moyen de refaire un rebas git-svn. ou réinitialiser les effets par celui-ci.git-svn rebasse horriblement mal

Dans mon référentiel git-svn +8000 commit, un problème est survenu après la fusion d'une branche. Mon «maître» local ne reflète rien près d'un journal complet du tronc.

Et en cours d'exécution git svn rebase récupère correctement les nouvelles révisions, mais essaie ensuite d'appliquer ce qui ressemble à tous les commits 8000+ de la jonction svn.

Y a-t-il des moyens de réinitialiser et de s'assurer que la tête du maître pointe vers la tête du coffre?

Répondre

9

Il y a un peu de confusion dans les termes: "HEAD" n'est pas la même chose que "head" ou "tip". "HEAD" fait référence à la branche actuellement vérifiée.

Quoi qu'il en soit. :)

Si vous voulez vraiment jeter tout ce que vous avez fait et retourner votre maître à une copie exacte du tronc, c'est très simple. En supposant que le Maître est vérifié:

git reset --hard trunk 

Attention: --hard reset détruit les modifications non validées.

Si vous voulez faire un salut avancé de travaux antérieurs, permettez-moi de vous donner une très, très brève introduction à l'une des nombreuses ceintures de sécurité git: le reflog. Par exemple, si vous dites

git log -g master 

vous verrez une liste de, bien, "points de sauvegarde" pour maître. Nous appelons cela le reflet en terre git. Chaque fois qu'une opération change une branche, elle ajoute un nouveau point de sauvegarde au sommet de la branche de la branche. En d'autres termes, si la dernière opération que vous ne horriblement foiré votre branche, vous pouvez retourner votre succursale à ce qu'il était immédiatement avant cette opération:

git reset --hard [email protected]{1} 

Ce @{1} fera plus de sens une fois que vous regardez un reflog. git prend également en charge une syntaxe plus flashy, comme @{10.minutes.ago}.

Beaucoup plus de choses sont possibles, mais cela devrait suffire à régler les choses pour l'instant.

+0

Je n'étais pas au courant du mot clé de coffre: 'git reset --hard trunk'. Cela a fait l'affaire. –

+0

Ce n'est pas exactement un mot-clé. C'est juste le nom de la copie git-svn du tronc de SVN ... ou plutôt, la forme abrégée du nom complet. Vous pouvez voir une liste complète des noms courts en utilisant, par exemple, git branch -r. –