La semaine dernière, j'ai créé un dépôt Github et oublié de sélectionner une licence pour le dépôt. Maintenant, il y a déjà 3 gros commits.
J'ai demandé aux 3 contributeurs si tout va bien, si je supprime le référentiel, puis le crée à nouveau avec le même nom et cette fois en sélectionnant la licence lors de la création du référentiel, et ils savent très bien quoi.
Question
Existe-t-il un moyen d'obtenir les validations dans un nouveau référentiel (cette fois, le premier commit est le fichier LICENSE) tout en conservant les méta-informations de commit?
Existe-t-il un moyen d'obtenir les validations dans un nouveau référentiel (cette fois, le premier commit est le fichier LICENSE) tout en conservant les méta-informations de commit?
Oui, en ajoutant une télécommande et en sélectionnant les commits par-dessus 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 précédent dépôt.
Oui. Vous pouvez placer votre commit LICENSE comme premier commit en le rebasant.
Le changement de base est un moyen génial de réorganiser l'ordre de validation tout en conservant intacts tous les auteurs et les dates de validation.
Lorsque vous travaillez sur un référentiel partagé, cela est généralement déconseillé, à moins que votre équipe ne soit git-fluente. Pour ceux qui ne le sont pas, ils peuvent simplement cloner une nouvelle copie du référentiel.
Voici comment vous obtenez votre commit LICENSE en tant que premier commit.
Vérifiez votre projet et placez le fichier LICENSE dans un commit EN DEBUT de votre pile actuelle de 3 commit.
#create LICENSE file, edit, add content, save
git add LICENSE
git commit -m 'Initial commit'
Faites ensuite une rebase interactive sur la branche principale versRÉARRANGEles commits.
git rebase -i --root
Il va ouvrir un éditeur. Déplacez la ligne du bas (votre commit "Commit initial", 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 votre copie locale du référentiel mise à jour. faire:
git log
vérifier.
Maintenant que votre copie est mise à jour, vous devez forcer Push to github.
git Push -f Origin master
Cela indiquera à github de déplacer la branche principale vers son nouvel emplacement . Vous ne devez forcer Push que dans de rares occasions comme celle-ci, où tous ceux qui travaillent avec elle sont au courant du changement en attente, sans quoi cela dérouterait vos collaborateurs.
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 tout. Tout le monde devrait être synchronisé maintenant.
J'ai eu un problème similaire où j'ai oublié de débiter un repo dans mon github et j'ai ajouté plusieurs commits avant de me rendre compte de mon erreur.
J'ai trouvé une solution assez simple.
Commencez par retirer la télécommande du rapport d'origine
git remote remove Origin
Deuxièmement, ajoutez une télécommande à la nouvelle fourche de mon github
git remote add Origin <my repo URL>
Puis j'ai poussé sur Origin Master et tous mes commits sont apparus sur mon github.
SourceGit = UrlS
git clone UrlS
git remote add Origin2 UrlD
git Push -f Origin2 master
Maintenant, la destination aura les mêmes données que la source (vous pouvez également utiliser Origin au lieu de Origin2)