Question

J'ai récemment foiré mon git et je voudrais savoir s'il y a un remède à elle.

Ma configuration est la suivante:

Central repo on github.
Personal repo on github (which is a fork of Central)
   +Central is setup as remote (upstream/master)
   +Master branch (origin/master)
   +Feature branch (origin/feature)

Mon flux de travail était comme ceci:

Need to fix something in Central:
   1. checkout Master
   2. Make changes
   3. Pull from upstream/master and merge
   3. Commit, push to upstream/master

Need to work on a New Feature:
   1. Checkout/Create Feature branch
   2. Work work work
   3. Pull from upstream/master and merge
   4. Commit, push to upstream/master

De cette façon, j'avais toujours dans ma branche principale un état vierge de centrale.

Maintenant que je l'ai été commencé à travailler sur la branche principale à la place. Je fis donc des modifications à mon maître et je ne peux branche la plus longue de lui pour obtenir une copie de Central. Chaque fois que je dois faire et pousser quelques corrections à Central, je dois cloner le Central dans un autre répertoire et travailler à partir de là.

Ma question: Y at-il un moyen de « revenir » mon maître être une copie identique de la centrale, tout en se déplaçant tous les changements que j'ai fait sur mon Maître dans une autre branche (dire Feature)

?

Je sais qu'il est source de confusion, et je vous serais reconnaissant de toute aide. Je clarifiera si quelque chose ne sait pas.

Était-ce utile?

La solution

Eh bien la solution est assez simple, insinué par Pat Notz et Bombe.

#Make sure we're on the master branch
$ git checkout master

# Make a new branch to hold the work I've done
$ git branch old_master
# Save this branch on my remote repo (for backup)
$ git checkout old_master
$ git push origin old_master

# Reset my local master back to match the commit just before I started 
# working on my new feature
$ git checkout master
$ git reset --hard 2aa93842342342
# Get it to be the same as my Central
$ git pull upstream master

# Now DELETE my master on my remote repo
$ git push origin :master
# And recreate it
$ git push origin master

# Branch created!
#* [new branch]      master -> master

#

Maintenant, j'ai deux branches agréable: maître et old_master. Avec maître étant une copie de mon Central, pour des solutions à la production, et old_master tenant tout le travail que je l'ai fait auparavant!

Merci!

Autres conseils

# Make sure we're on the master branch
$ git checkout master

# Make a new branch to hold the work I've done
$ git branch old_master

# Reset my local master back to match origin/master
$ git reset --hard origin/master

Vous pouvez maintenant la caisse old_master et de l'utiliser comme vous avez fait votre branche feature

Que voulez-vous dire par

  

Je foiré [en] mon maître et ne peut branche la plus longue de lui.

Vous pouvez toujours créer une nouvelle branche de tout commettras dans votre dépôt, peu importe comment « foiré » il peut être-qui, par la voie est quelque chose Git n'a pas de notion.

Fondamentalement, vous pouvez revenir votre dépôt à tout état dans lequel il avait auparavant parce que Git ne explicitement supprimer tous les objets, il ne garbage collecter sans référence (ballants) des objets tout en temps. Donc, vous avez juste besoin de savoir ce que votre référentiel ressemblait. gitk ou git log peut vous aider.

Après avoir restauré votre dépôt local à un état que vous le souhaitez, vous pouvez simplement le pousser vers votre répertoire public central. Si cela se traduit par une poussée vers l'avant non rapide, vous pourriez avoir besoin de spécifier le drapeau --force en poussant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top