2016-05-05 1 views
2

J'étais sur branch1 et il a quelques commits que j'ai fait pour branch1. Après avoir terminé ma tâche (et poussé ces commits à distance). Je suis passé à branch2 de branch1 avec la commande suivanteSupprimer tous les commits que j'ai poussés

git checkout -b branch2

je comptais créer à partir master mais je tort créé à partir branch1

J'ai fait quelques changements dans branch2 puis COMMIT/pousser à la à distance par la commande git push origin branch2. Maintenant, quand je regarde repo à distance, je vois tous mes branch1 commits dans l'histoire de branch2. Gardez à l'esprit que c'était la première fois que je m'engage à branch2 alors je me fous de tous les commits précédents.

P.S

Un peu plus fond la façon dont les branches sont liées.

J'avais un code qui était dans la branche master (que nous avons décidé de scrapper). Maintenant, j'ai créé une nouvelle branche branch1

> git status 
> on branch master 
> git checkout -b branch1 

qui a un échafaudage de base du projet. Cette branche (une fois approuvée) sera fusionnée (dans ce cas, écraser) la branche master. Le branch2 a la couche de DB ajoutée au-dessus. En théorie, il serait ajouté au-dessus de branch1 mais quand je l'ai fait j'ai vu que branch2 a tous les commits que j'avais en branch1 qui m'a fait penser que lorsque nous fusion branch1 sur master, suivie branch2 ne pas provoquer à double engage histoire? C'est la raison pour laquelle je voulais supprimer les commits précédents (qui ont été empruntés de branch1 à branch2).

+0

De quelle branche/commit aviez-vous l'intention de créer 'branch2'? Sans le savoir, nous ne pouvons pas vous donner une réponse détaillée sur la façon de remédier à votre situation. –

+0

J'ai mis à jour ma question. Je voulais le créer à partir de 'master' –

+2

Je vous ai donné une réponse.Si je savais mieux comment 'branch1' et' master' étaient liés je pourrais donner d'autres possibilités, mais pour l'instant je pense que 'git cherry-pick' est le plus logique. –

Répondre

1

Lorsque vous avez fait:

git checkout -b branch2 

vous créé branch2 au-dessus de branch1. Cela signifie que tous les validations dans branch1 seront là, avec les nouvelles validations que vous avez faites à branch2 ajoutées par dessus. Sans savoir quelle est la relation exacte entre branch1 et master, ce dernier à partir duquel vous avez vraiment l'intention de créer votre branche, le moyen le plus sûr de corriger la situation pourrait être de choisir les nouveaux commits de branch2 sur une branche créée à partir de master:

git checkout branch2 
git log 
# observe and record the SHA-1 hashes of the commits you made 

git checkout master 
git checkout -b new_branch2 

# now cherry-pick the commits from branch2 which you want to keep 
git cherry-pick 2hie87jm8 # first commit 
git cherry-pick j2cnd82ld # second commit 
# and so on for all commits, in the order you made them 

Maintenant vous avez vos commits assis sur la bonne branche. Vous pouvez supprimer branch2 maintenant via:

git branch -d branch2