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.