J'ai vérifié quelques commits dans master
qui auraient dû être archivés dans develop
. Quelles commandes git ai-je utilisées pour supprimer ces commits de la branche master et les inclure dans la branche develop?
Si je ne me trompe pas, vous aviez deux branches synchronisées, master
et dev
, et vous avez simplement oublié de changer de branche, Avant vos commits.
Si tel est le cas, nous avons:
----------------
git log in dev
xxx
yyy
...
----------------
et:
----------------
git log in master
ccc
bbb
aaa
<---- here you forgot to switch branch
xxx
yyy
...
----------------
La solution est:
Tout d'abord, assurez-vous que:
git status -s
renvoie des résultats vides.
Ensuite, obtenez tous vos nouveaux commits de master
à dev
avec:
git checkout dev
git merge master
Maintenant, revenez à vous master
:
git checkout master
Supprimer les commits inutiles:
git reset --hard HEAD~3
Le nombre ~3
est le nombre de commits que vous souhaitez supprimer.
N'oubliez pas que git status -s
doit renvoyer des résultats vides ..__ sinon, git reset --hard
peut entraîner une perte de données.
Pour faire face à une autre branche, vous pouvez utiliser la sélection de cerises:
git cherry-pick <commit>
Supprimer n'est pas si facile. Vous pouvez utiliser rebase et squash ou éditer le commit:
git rebase -i <commit>~1
Mais je ne suis pas sûr de pouvoir modifier lors de la réédition si vous pouvez également modifier les fichiers plutôt que le message de validation.
Vous pouvez cherry-pick
vos commits sur la develop
et ensuite interactivement rebase
votre branche master
:
git checkout develop
git cherry-pick aabbcc
git cherry-pick ddeeff
git checkout master
git rebase 123456 -i
où 123456
est un commit avant de commettre une erreur. Cela ouvrira un éditeur qui montrera chaque commit qui sera affecté par la base. Supprimez les lignes correspondant aux commits que vous souhaitez supprimer et quittez l'éditeur.
Il y a généralement plusieurs façons de faire la même chose d'une manière possible:
git checkout develop
git cherry-pick XXX // XXX being the sha1 of the commit you want to grab
git checkout master
git rebase --interactive HEAD~IDX // IDX being the position of the last "good" commit compared to HEAD
La dernière commande affiche toutes les critiques de HEAD jusqu'au dernier bon commit et tout ce que vous avez à faire est de supprimer la ligne du commit dans le développement de la branche