GNU/Linux >> Linux Esercitazione >  >> Linux

Come copiare i commit da un repository Git a un altro?

Ho avuto un problema simile in cui ho dimenticato di eseguire il fork di un repository nel mio github e ho aggiunto diversi commit prima di rendermi conto del mio errore.

Ho trovato una soluzione piuttosto semplice.

Per prima cosa rimuovi il telecomando dal repository originale

git remote remove origin

Secondo, aggiungi un telecomando al nuovo fork sul mio github

git remote add origin <my repo URL>

Quindi sono passato a origin master e tutti i miei commit sono stati visualizzati sul mio github.


C'è un modo per inserire i commit in un nuovo repository (questa volta il primo commit è il file LICENSE) e mantenere comunque le meta informazioni del commit?

Sì, aggiungendo un telecomando e selezionando i commit oltre al tuo primo commit.

# add the old repo as a remote repository 
git remote add oldrepo https://github.com/path/to/oldrepo

# get the old repo commits
git remote update

# examine the whole tree
git log --all --oneline --graph --decorate

# copy (cherry-pick) the commits from the old repo into your new local one
git cherry-pick sha-of-commit-one
git cherry-pick sha-of-commit-two
git cherry-pick sha-of-commit-three

# check your local repo is correct
git log

# send your new tree (repo state) to github
git push origin master

# remove the now-unneeded reference to oldrepo
git remote remove oldrepo

Il resto di questa risposta è se vuoi ancora aggiungere la LICENZA al tuo repository precedente.

Sì. Puoi inserire il tuo commit di LICENZA come primo commit ribasando.

Il rebasing è il modo gits di riorganizzare l'ordine di commit mantenendo intatti tutti gli autori di commit e le date di commit.

Quando si lavora su un repository condiviso, è generalmente sconsigliato a meno che l'intero team non sia fluente in git. Per coloro che non lo sono, possono semplicemente clonare una nuova copia del repository.

Ecco come ottenere il commit della LICENZA come primo commit.

1. Aggiorna e rebase la tua copia locale

Dai un'occhiata al tuo progetto e posiziona il file LICENSE in un commit SOPRA il tuo attuale stack di 3 commit.

#create LICENSE file, edit, add content, save
git add LICENSE
git commit -m 'Initial commit'

Quindi esegui un rebase interattivo sul ramo principale per RIORDINARE i commit.

git rebase -i --root

Si aprirà un editor. Sposta la riga inferiore (il tuo commit "Initial commit", il commit più recente) all'inizio del file. Quindi salva ed esci dall'editor.

Non appena esci dall'editor, git scriverà i commit nell'ordine che hai appena specificato.

Ora hai aggiornato la tua copia locale del repository. fare:

git log

da verificare.

2. Forza il push del tuo nuovo stato di repository su github

Ora che la tua copia è aggiornata, devi forzare il push su github.

git push -f origin master

Questo dirà a github di spostare il ramo principale nella sua nuova posizione. Dovresti forzare il push solo in rare occasioni come questa in cui tutti coloro che lavorano con esso sono a conoscenza del cambiamento in sospeso, altrimenti confonderà i tuoi collaboratori.

3. Sincronizza i collaboratori su github

Infine, tutti i collaboratori dovranno sincronizzarsi con questo repository.

Per prima cosa devono avere repository puliti poiché il seguente comando può essere distruttivo se sono presenti modifiche non salvate.

# make sure there are no unsaved changes
git status 

# pull the latest version from github
git fetch  

# move their master branch pointer to the one you published to github.
git reset --hard origin/master

Questo è tutto. Tutti dovrebbero essere sincronizzati ora.


Linux
  1. Come copiare le impostazioni da una macchina all'altra?

  2. Come passare l'output di un comando come argomento a un altro?

  3. Scopri come copiare file e cartelle da/su un altro server

  4. CentOS / RHEL:come spostare un gruppo di volumi da un sistema all'altro

  5. Copia la struttura delle cartelle (senza file) da una posizione all'altra

Come copiare elementi da un DynamoDB a un'altra tabella DynamoDB utilizzando Python su AWS

Come trovare e copiare determinati tipi di file da una directory all'altra in Linux

Come spostare tutti i file (inclusi quelli nascosti) da una directory all'altra?

Come copiare un file da un'altra directory a quella corrente?

Come copiare i dati da un sito Web WordPress a un altro in Plesk

Copia file di grandi dimensioni da un server Linux a un altro