2010-01-26 6 views
2

J'utilise Git pour mes projets personnels avec un référentiel distant hébergé sur assembla.com. Je suis habitué à un simple workflow de type svn, mais maintenant j'essaye de faire quelque chose qui (je pense) devrait être relativement simple mais la documentation de git ne m'a pas aidé à l'accomplir jusqu'ici.Enregistrement des modifications dans une branche distante dans Git

C'est la situation. J'ai fait un tas de changements dans ma branche principale locale, et je les ai engagés. Maintenant je me rends compte que mes changements ne sont pas absolument nécessaires et plutôt préjudiciables à la performance, mais peuvent être utiles/nécessaires dans le futur. Donc, je veux revenir à l'état précédent, tout en conservant ces modifications stockées quelque part. Bien sûr, git reset --hard ne le fera pas car il effacera définitivement mes changements. Je ne suis pas sûr que ce soit la bonne solution, mais je pense faire une branche avec ces changements, mais je n'arrive pas à comprendre la bonne séquence de commandes pour le faire. Notez que je veux garder une trace de ces changements dans le dépôt distant, pas seulement mon référentiel local, puisque je travaille depuis différents ordinateurs.

Je vous serais reconnaissant pour toutes les idées sur la façon de le faire, qu'ils impliquent des succursales distantes ou non.

Répondre

3

Vous voulez créer une branche à votre tête actuelle:

git branch possibly-useful-stuff 

puis réinitialiser votre branche principale à l'endroit où il appartient, probablement l'un de ceux-ci:

git reset --hard origin/master # the remote branch 
git reset --hard master~<n>  # n commits before master 
git reset --hard <hash>   # a specific commit 

Pour garder une trace de eux dans la télécommande, vous aurez juste besoin de pousser cette branche à la télécommande:

git push <remote> possibly-useful-stuff 
+0

Merci pour la réponse, cela a fonctionné. – dimatura

1

Le s implémenter chose à est de faire une nouvelle branche contenant votre état actuel. Vous pouvez ensuite l'envoyer au maître distant et réinitialiser votre branche principale à la position du maître distant.

E.g.

git branch side-lined 

git push origin side-lined 

git reset --hard origin/master 
0

Je ne git pas spécifiquement, mais j'utilise Mercurial. Si je courais dans cette situation avec Mercurial, je le commettrais comme une branche (d'une façon ou d'une autre, d'une façon ou d'une autre) et ensuite vérifierais la révision désirée.

Lors de mon prochain commit, Mercurial créerait une nouvelle révision tête. Je sais que c'est général, mais j'ai eu l'idée alors je l'ai partagé.

Git et Mercurial sont similaires, donc je pense que les idées devraient travailler pour vous ... (S'il vous plaît noter qu'il existe des différences de terminologie et je peux pas utiliser les bons termes)

Note: Il semble que d'autres Depuis, j'ai posté des instructions spécifiques à Git en faisant ce que je décrivais.

+0

Pourquoi publieriez-vous une réponse générale alors qu'il y a déjà trois réponses en double avec les détails? – Cascabel

+0

J'écrivais et je ne les ai pas vu venir. En plus de cela, je pense que donner l'idée générale de ce qu'il faut faire serait plus productif que de donner les commandes exactes. –

+0

Très bien, désolé, je pensais que ça aurait été un peu plus long depuis que l'original a répondu. L'idée générale est bonne, mais il est un peu dangereux de mélanger mercurial et git quand on donne des conseils aux débutants, puisqu'il y a des variations dans la terminologie.Dans ce cas, il n'y a qu'un seul HEAD dans un dépôt git (il pointe vers la branche courante), et vous créez directement des branches (ne marquez pas les commits comme des branches). – Cascabel

Questions connexes