Comment rebase un dépôt Git sur un autre?
J'ai eu un dépôt Git (A) qui contient le développement d'un projet, jusqu'à un certain point. Puis j'ai perdu la clé USB ce repo a était sur. Heureusement j'avais une sauvegarde du dernier commit, j'ai donc pu créer un nouveau référentiel (B) plus tard, où j'ai importé le dernier projet de l'état et de continuer le développement.
Maintenant que j'ai récupéré qui a perdu la clé USB, j'ai donc deux dépôts Git.
Je pense que j'ai juste à rebase pensions de B sur Un repo en quelque sorte, mais je n'ai aucune idée de comment faire cela, peut-être l'aide d'extraire/pull et rebase?
Vous devez vous connecter pour publier un commentaire.
Si A et B ne sont pas les mêmes pensions de titres (que vous avez créé B à l'aide de la dernière copie de travail, vous avez eu), vous devez utiliser un greffe de prétendre qu'ils ont une histoire commune.
Supposons que vous avez ajouté Une distance de B selon les VonC réponse, et l'opération ressemble à ceci1:
Créer une greffe de dire à la racine de B que sa mère est à la tête d'Un:
Maintenant les deux histoires ci-dessus apparaît lorsque vous demandez de l'histoire de B. Prise de la greffe permanent est une simple
git filter-branch
sans arguments. Après le filtre-branche, bien que, vous n'êtes pas sur n'importe quelle branche, de sorte que vous devraitgit branch -D master; git checkout -b master
.1
git tnylog
=git log --oneline --graph --decorate
git-tnylog
n' (j'ai été intrigué et m'a pris un certain temps jusqu'à ce que j'ai trouvé que c'était un pseudonyme de la vôtre: 'Pimped tnylog un peu" )git filter-branch 33b5b16dde3af6f5592c2ca6a1a51d2e97357060..HEAD
à partir de lien mais alors je ne peux pas pousser plus depuis que j'ai l'erreur que la télécommande est en suspens deltas (remote: fatal: pack has 50 unresolved deltas
).Si A et B sont de la même repo (la première SHA1 sont communs), vous pouvez:
git remote add A /path/to/A
git fetch A
à mise à jour tous les Un les branches sur le B repogit checkout dev
(sur B, où vous êtes en développement)git rebase A/devBranch
relire B (c'est à dire ce que vous développer ou re-développer à partir de votre sauvegarde) sur le dessus deA/devBranch
(le développement, vous avez perdu). Un peu comme ce DONC, la question.La dernière étape vous permet de synchroniser votre dev avec celui que vous avez perdu.
Mais en fait, une fois que vous avez récupérer à partir d'Un, vous êtes en fait: B contient maintenant le "tous" de l'histoire (celui que vous avez perdu et votre travail en cours)
dev
, tous vous avez besoin estgit rebase A/devBranch
afin de rejouerdev
sur le dessus deA/devBranch
. J'ai édité la réponse.Tout d'abord, commencez par faire un travail de clone de pensions A.
Ensuite il suffit de tirer dedans à partir de B et de fusion. Vous préférerez peut-être créer une nouvelle branche, tirez sur elle, puis la fusion des deux branches. Vous pourriez également avoir besoin d'un forçage drapeau; je l'ai fait ce genre de choses dans Mercurial (greffage de deux apparemment sans rapport avec les référentiels de l'ensemble) et il faut "-f".