32 votes

Créer une branche git et ramener l'original à l'état en amont

Récemment, j'ai foiré mon repo git et voudrais savoir si il existe un remède pour elle.

Ma configuration est:

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 travail était comme ça:

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'ai toujours eu un état primitif de la Centrale dans ma branche Master.

Maintenant ce que j'ai fait a commencé à travailler sur la branche Master à la place. J'ai donc apporté des modifications à mon maître et n'est plus en direction de d'obtenir une copie de la Centrale. Chaque fois que j'ai besoin de faire et de pousser certains des correctifs à la Centrale, je dois cloner la Centrale dans un autre répertoire et de travailler à partir de là.

Ma question: Est-il possible de "revenir" mon maître pour être une copie à l'identique de la Centrale, tandis que le déplacement de toutes les modifications que j'ai faites sur mon Master dans une autre branche (dire Fonctionnalité)?

Je sais que c'est confus, et je vous serais reconnaissant de toute aide. Je vais préciser si quelque chose n'est pas clair.

48voto

drozzy Points 7887

Eh bien, la solution était assez simple, suggérée 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 belles branches: master et old_master. Avec master étant une copie de mon Central, pour les correctifs de production, et old_master tenant tout le travail que j'ai fait précédemment!

Merci!

16voto

Pat Notz Points 46841
 # 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 commander old_master et l'utiliser comme vous l'avez fait pour votre branche feature

3voto

Bombe Points 34185

Que voulez-vous dire exactement par

J'ai foiré [up] mon maître et ne peut plus branche d'elle.

Vous pouvez toujours créer une nouvelle branche à partir de validation dans votre référentiel, n'importe comment "foiré" c'est peut-être–qui est quelque chose de Git n'a pas de notion de.

Fondamentalement, vous pouvez revenir à vos référentiel à tout etat, qu'il avait précédemment parce que Git ne sera pas explicitement supprimer tous les objets, il ne collecter les ordures non référencées (bancales) les objets chaque maintenant et puis. Vous avez juste besoin de savoir ce que votre référentiel ressemblait. gitk ou git log peut vous y aider.

Après avoir restauré votre dépôt local vers un état vous le souhaitez, vous pouvez simplement le pousser à revenir à votre centrale dépôt public. Si cela se traduit par une non-avance rapide poussoir, vous pourriez avoir besoin de spécifier l' --force drapeau lors de la poussée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X