J'ai bifurqué un dépôt, puis j'ai fait quelques changements et il semble que j'ai tout gâché.
Je souhaite le recommencer à zéro, en utilisant le courant amont / maître comme base pour mon travail.
Dois-je rebaser mon référentiel ou le supprimer du tout?
Réponses:
La solution la plus simple serait (en utilisant '
upstream
' comme nom distant référençant le repo original fourchu):(Similaire à cette page GitHub, section "Que dois-je faire si je suis dans une mauvaise situation?" )
Sachez que vous pouvez perdre les modifications effectuées sur la
master
branche (à la fois localement, à cause dereset --hard
, et sur le côté distant, à cause de lapush --force
).Une alternative serait, si vous souhaitez conserver vos validations
master
, de rejouer ces validations en plus du courantupstream/master
.Remplacez la pièce de réinitialisation par a
git rebase upstream/master
. Vous devrez alors encore forcer la poussée.Voir aussi " Que dois-je faire si je suis dans une mauvaise situation? "
Une solution plus complète, sauvegardant votre travail actuel (juste au cas où) est détaillée dans " Nettoyer la branche principale de git et déplacer certains commit vers une nouvelle branche ".
Voir aussi " Extraire les nouvelles mises à jour du référentiel GitHub d'origine dans le référentiel GitHub bifurqué " pour illustrer ce qu'est "
upstream
".Remarque: les dépôts GitHub récents protègent la
master
branche contrepush --force
.Vous devrez donc d'abord retirer la protection
master
(voir l'image ci-dessous), puis la re-protéger après avoir poussé de force ).Remarque: sur GitHub en particulier, il existe maintenant (février 2019) un raccourci pour supprimer les dépôts fourchus pour les demandes d'extraction qui ont été fusionnées en amont.
la source
git reset --hard upstream/master
git reset
dans la réponse.git remote
commandes " " dans stackoverflow.com/a/3903835/6309 .J'adore la réponse de VonC. En voici une version simple pour les débutants.
Il y a une télécommande git appelée
origin
dont je suis sûr que vous êtes tous au courant. Fondamentalement, vous pouvez ajouter autant de télécommandes à un dépôt git que vous le souhaitez. Donc, ce que nous pouvons faire, c'est introduire une nouvelle télécommande qui est le dépôt d'origine et non la fourche. J'aime l'appeleroriginal
Ajoutons des dépôts originaux à notre fourche en tant que télécommande.
Maintenant, récupérons le dépôt d'origine pour nous assurer que nous avons le dernier code
Comme l'a suggéré VonC, assurez-vous que nous sommes sur le maître.
Maintenant, pour mettre à jour notre fourche avec le dernier code du référentiel d'origine, tout ce que nous avons à faire est de réinitialiser durement notre branche principale conformément à la télécommande d'origine.
Et vous avez terminé :)
la source
fatal: ambiguous argument 'original/master': unknown revision or path not in the working tree.
dans la dernière étape. Aucun conseil?original
est mieux queupstream
(que les documents Github utilisent), tout commeorigin/master
"en amont" de localmaster
. Réduit l'ambiguïté. Je me demande si c'est pour ça que vous l'utilisez?Suite à @VonC excellente réponse. La politique de votre entreprise GitHub peut ne pas autoriser la «poussée forcée» sur le maître.
remote: error: GH003: Sorry, force-pushing to master is not allowed.
Si vous obtenez un message d'erreur comme celui-ci, veuillez suivre les étapes suivantes.
Pour réinitialiser efficacement votre fork, vous devez suivre ces étapes:
Ouvrez votre fork sur GitHub, dans "Paramètres -> Branches -> Branche par défaut", choisissez 'new_master' comme nouvelle branche par défaut. Vous pouvez maintenant forcer le push sur la branche 'master':
Ensuite, vous devez définir "master" comme branche par défaut dans les paramètres GitHub. Pour supprimer 'tmp_master':
D'autres réponses avertissant de la perte de votre changement s'appliquent toujours, faites attention.
la source
Comment le faire à 100% via l' interface graphique de Sourcetree
(Tout le monde n'aime pas faire les choses via l'interface de ligne de commande git)
Pas
Double-cliquez sur votre branche "maître" pour la vérifier si elle n'est pas déjà extraite.
Trouvez le commit que vous souhaitez réinitialiser, si vous avez appelé le référentiel "master", vous voudrez probablement trouver le commit avec la balise "master / master" dessus.
Faites un clic droit sur le commit> "Réinitialiser la branche actuelle sur ce commit".
Dans la boîte de dialogue, définissez le champ "Mode d'utilisation:" sur "Ignorer toutes les modifications de la copie de travail", puis appuyez sur "OK" (assurez-vous de placer d'abord les modifications que vous ne souhaitez pas perdre dans une branche distincte).
Tu es fini!
la source