Domanda

Ho avuto un repository Git (A) che contiene lo sviluppo di un progetto fino a un certo punto. Poi ho perso la chiave USB questo repo A era su. Per fortuna avevo una copia di backup delle ultime commit, così ho potuto creare un nuovo repository (B) entro cui ho importato stato l'ultimo del progetto e continuare lo sviluppo. Ora ho recuperato quella persa chiavetta USB, in modo da avere due repository Git.

Credo che non mi resta che rebase repo B sul repo A in qualche modo, ma non ho idea di come fare, magari usando recuperare / pull e rebase?

È stato utile?

Soluzione

Se A e B non sono gli stessi di pronti contro termine (si è creato B utilizzando l'ultima copia di lavoro si ha), è necessario utilizzare un trapianto far finta che essi hanno una storia comune.

Supponiamo che hai aggiunto A come un telecomando per B secondo di VonC risposta , e il repo assomiglia a questo 1 :

~/B$ git tnylog 
* 6506232 (HEAD, master) Latest work on B
* 799d6ae Imported backup from USB stick
~/B$ git tnylog A/master
* 33b5b16 (A/master) Head of A
* 6092517 Initial commit

Crea un innesto di raccontare la radice di B che il suo padre è il capo di A:

echo '799d6aeb41095a8469d0a12167de8b45db02459c 33b5b16dde3af6f5592c2ca6a1a51d2e97357060' \
 >> .git/info/grafts

Ora le due storie di cui sopra, apparirà come uno quando si richiede la cronologia per B. Fare l'innesto permanente è un semplice git filter-branch senza argomenti. Dopo il filtro-ramo, però, non si trova in qualsiasi ramo, così si dovrebbe git branch -D master; git checkout -b master.


1 = git tnylog git log --oneline --graph --decorate

Altri suggerimenti

Se A e B sono gli stessi pronti contro termine (il primo SHA1 sono comuni), è possibile:

  • dichiarare A come un telecomando per B: git remote add A /path/to/A
  • git fetch A tutti remoti A rami sul repo B
  • git checkout dev (in B, dove si sta sviluppando)
  • git rebase A/devBranch per riprodurre B (vale a dire quello che si sviluppa o ri-sviluppare dal backup) sulla parte superiore del A/devBranch (lo sviluppo si perde). Un po 'come questo domanda SO .

L'ultimo passaggio permette di sincronizzare il vostro dev con quello che hai perso.
Ma in realtà, una volta che hai recuperare da A, si è fatto: B contiene ora il " tutti " la storia (quello che hai perso e il vostro lavoro corrente)

Prima di tutto, iniziare facendo un clone di lavoro di pronti contro termine A.

Poi basta tirare in esso da B e si fondono. Si potrebbe preferire di creare un nuovo ramo, tirare su di esso, quindi unire i due rami. Potrebbe anche essere necessario un flag di forzatura; Ho fatto cose di questo genere in Mercurial (innesto due repository apparentemente non correlati-insieme) e di cui ha bisogno "-f".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top