Nettoyez une fourche et redémarrez-la en amont

J’ai fourré un repository, puis j’ai apporté quelques modifications et il semble que j’ai tout gâché.

Je souhaite le recommencer à partir de zéro, en utilisant le courant en amont / maître comme base pour mon travail.
Dois-je rebaser mon repository ou le supprimer du tout?

La solution la plus simple serait (en utilisant ‘ upstream ‘ comme nom distant référençant le repo original en forme de fourche):

 git remote add upstream /url/to/original/repo git fetch upstream git checkout master git reset --hard upstream/master git push origin master --force 

(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 twig master (à la fois localement, à cause du reset --hard , et du côté distant, à cause de push --force ).

Une alternative serait, si vous souhaitez conserver vos commits sur master , de rejouer ces commits au-dessus de l’ upstream/master actuel.
Remplacez la partie reset par une git rebase upstream/master . Vous devrez alors continuer à pousser.
Voir aussi ” Que dois-je faire si je suis dans une mauvaise situation? ”


Une solution plus complète, la sauvegarde de votre travail en cours (au cas où) est détaillée dans ” Nettoyer la twig master de git et déplacer des validations dans une nouvelle twig “.

Voir aussi ” Extraire les nouvelles mises à jour du référentiel GitHub original dans le référentiel GitHub forké ” pour illustrer ce qu’est “en upstream “.

en amont


Remarque: les mises en pension récentes de GitHub protègent la twig principale contre push --force .
Vous devrez donc d’abord protéger le master (voir l’image ci-dessous), puis le protéger à nouveau après avoir forcé .

entrer la description de l'image ici

J’adore la réponse de VonC. Voici une version facile pour les débutants.

Il y a un git remote appelé origin que vous connaissez tous, j’en suis sûr. Fondamentalement, vous pouvez append autant de télécommandes à un repo git que vous le souhaitez. Donc, ce que nous pouvons faire, c’est introduire une nouvelle télécommande qui est le rapport initial, pas la fourchette. J’aime l’appeler original

Ajoutons des repo originaux à notre fourche en tant que télécommande.

 git remote add original https://git-repo/original/original.git 

Maintenant, récupérons le repository original pour nous assurer que nous avons le dernier code

 git fetch original 

Comme VonC l’a suggéré, assurez-vous que nous sums sur le maître.

 git checkout master 

Maintenant, pour mettre notre fork à jour avec le dernier code sur le repository d’origine, tout ce que nous avons à faire est de réinitialiser notre twig principale conformément à la télécommande d’origine.

 git reset --hard original/master 

Et vous avez terminé 🙂

Suite à la bonne réponse de @VonC. La nouvelle politique de GitHub n’autorise pas la «poussée forcée» sur le maître. Si vous obtenez un message d’erreur comme celui-ci, veuillez suivre les étapes suivantes. remote: error: GH003: Sorry, force-pushing to master is not allowed.

Pour réinitialiser efficacement votre fourche, vous devez suivre ces étapes:

 git checkout master git reset --hard upstream/master git checkout -b tmp_master git push origin 

Ouvrez votre fork sur GitHub, dans “Paramètres -> Branches -> Branche par défaut” choisissez “new_master” comme nouvelle twig par défaut. Maintenant, vous pouvez forcer la poussée sur la twig «maître»:

 git checkout master git push --force origin 

Ensuite, vous devez définir «master» comme twig par défaut dans les parameters GitHub. Pour supprimer ‘tmp_master’:

 git push origin --delete tmp_master git branch -D tmp_master 

D’autres réponses vous avertissant de la perte de votre changement sont toujours valables.

Comment le faire à 100% via l’ interface graphique Sourcetree

(Tout le monde n’aime pas faire les choses via l’interface de ligne de commande git)

Une fois que cela a été configuré, il vous suffit de suivre les étapes 7-13.

Fetch> checkout master branch> réinitialiser à leur maître> pousser les modifications sur le serveur

Pas

  1. Dans la barre d’outils du menu en haut de l’écran: “Référentiel”> “Paramètres du référentiel”

  1. “Ajouter”

Bouton

  1. Revenez à GitHub et copiez l’URL du clone.

Bouton

  1. Collez l’URL dans le champ “URL / Chemin”, puis donnez-lui un nom qui a du sens. Je l’ai appelé “maître”. Ne cochez pas la case “Remote remote” . Vous ne pourrez pas accéder directement à ce référentiel.

Champs

  1. Appuyez sur “OK” et vous devriez le voir apparaître dans votre liste de référentiels maintenant.

Référentiel

  1. Appuyez sur “OK” à nouveau et vous devriez le voir apparaître dans votre liste de “télécommandes”.

Dépôt

  1. Cliquez sur le bouton “Extraire” (en haut à gauche de la zone d’en-tête de l’arborescence Source)

Bouton

  1. Assurez-vous que la case “Récupérer de toutes les télécommandes” est cochée et appuyez sur “ok”

Case à cocher

  1. Double-cliquez sur votre twig “maître” pour la vérifier si elle n’est pas déjà extraite.

  2. Recherchez le commit sur lequel vous souhaitez réinitialiser, si vous avez appelé le référentiel “master”, vous souhaiterez probablement trouver le commit avec la balise “master / master”.

Exemple de commit avec une balise

  1. Faites un clic droit sur la validation> “Réinitialiser la twig actuelle à cette validation”.

  2. Dans la boîte de dialog, définissez le champ “Using mode:” sur “Hard – ignorez toutes les modifications apscopes à la copie de travail” puis appuyez sur “OK” (assurez-vous de placer les modifications que vous ne voulez pas perdre dans une twig séparée)

Champ

  1. Cliquez sur le bouton “Push” (en haut à gauche de la zone d’en-tête de l’arborescence source) pour télécharger les modifications sur votre copie du repository.

Bouton

Tu es fini!