GNU/Linux >> Tutoriels Linux >  >> Linux

Comment copier des commits d'un dépôt Git à un autre ?

J'ai eu un problème similaire où j'ai oublié de créer un dépôt sur mon github et j'ai ajouté plusieurs commits avant de réaliser mon erreur.

J'ai trouvé une solution assez simple.

Retirez d'abord la télécommande du dépôt d'origine

git remote remove origin

Deuxièmement, ajoutez une télécommande au nouveau fork sur mon github

git remote add origin <my repo URL>

Ensuite, j'ai poussé vers le maître d'origine et tous mes commits sont apparus sur mon github.


Existe-t-il un moyen d'obtenir les commits dans un nouveau référentiel (cette fois, le premier commit est le fichier LICENSE) et de conserver les méta-informations de commit ?

Oui, en ajoutant une télécommande et en sélectionnant les commits en plus de votre premier 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

Le reste de cette réponse est si vous souhaitez toujours ajouter la LICENCE à votre dépôt précédent.

Oui. Vous pouvez placer votre commit LICENSE comme premier commit en rebasant.

Le rebasage est une manière gits de réorganiser l'ordre des commits tout en gardant intacts tous les auteurs et dates de commit.

Lorsque vous travaillez sur un référentiel partagé, cela est généralement déconseillé, sauf si toute votre équipe maîtrise git. Pour ceux qui ne le sont pas, ils peuvent simplement cloner une nouvelle copie du référentiel.

Voici comment obtenir votre commit LICENSE en tant que premier commit.

1. Mettez à jour et rebasez votre copie locale

Vérifiez votre projet et placez le fichier LICENSE dans un commit AU-DESSUS de votre pile actuelle de 3 commits.

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

Faites ensuite un rebase interactif sur la branche master pour REARRANGE les commits.

git rebase -i --root

Cela ouvrira un éditeur. Déplacez la ligne du bas (votre commit "Initial commit", le commit le plus récent) vers le haut du fichier. Puis enregistrez et quittez l'éditeur.

Dès que vous quittez l'éditeur, git écrira les commits dans l'ordre que vous venez de spécifier.

Vous avez maintenant mis à jour votre copie locale du référentiel. faire :

git log

à vérifier.

2. Forcez le push de votre nouvel état de dépôt vers github

Maintenant que votre copie est mise à jour, vous devez la forcer à pousser vers github.

git push -f origin master

Cela indiquera à github de déplacer la branche principale vers son nouvel emplacement. Vous ne devez forcer le push que dans de rares occasions comme celle-ci où tout le monde travaillant avec elle est au courant du changement en attente, sinon cela confondra vos collaborateurs.

3. Synchroniser les collaborateurs avec github

Enfin, tous les collaborateurs devront se synchroniser sur ce référentiel.

D'abord ils doivent avoir des référentiels propres car la commande suivante peut être destructive s'il y a des modifications non enregistrées.

# 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

C'est ça. Tout le monde devrait être synchronisé maintenant.


Linux
  1. CentOS / RHEL :Comment déplacer un groupe de volumes d'un système à un autre

  2. Comment copier une table d'une base de données mysql vers une autre base de données mysql

  3. Copier la structure des dossiers (sans fichiers) d'un emplacement à un autre

  4. Comment copier les 10 fichiers les plus récents d'un répertoire à un autre ?

  5. Comment renommer plusieurs fichiers d'une extension à une autre sous Linux/Unix ?

Comment copier des éléments d'une table DynamoDB vers une autre table DynamoDB à l'aide de Python sur AWS

Comment copier un fichier d'un autre répertoire vers celui en cours ?

Copier les dernières N-lignes d'un fichier à un autre ?

Comment passer la sortie d'une commande comme argument à une autre ?

Comment copier des données d'un site WordPress à un autre dans Plesk

Apprenez à copier des fichiers et des dossiers depuis/vers un autre serveur