Si vous êtes no travailler avec les autres (ou être heureux de leur causer des ennuis importants) il est alors possible de supprimer les commits des branches bitbucket.
Si vous essayez de modifier une branche non-master :
git reset HEAD^ # remove the last commit from the branch history
git push origin :branch_name # delete the branch from bitbucket
git push origin branch_name # push the branch back up again, without the last commit
si vous essayez de modifier la branche master
Dans git en général, la branche master n'est pas spéciale - c'est juste une convention. Cependant, bitbucket et github et les sites similaires exigent généralement qu'il y ait une branche principale (probablement parce que c'est plus facile que d'écrire plus de code pour gérer le cas où un dépôt n'a pas de branches - pas sûr). Vous devez donc créer une nouvelle branche, et en faire la branche principale :
# on master:
git checkout -b master_temp
git reset HEAD^ # undo the bad commit on master_temp
git push origin master_temp # push the new master to Bitbucket
Sur Bitbucket, allez dans les paramètres du référentiel, et changez la "branche principale" en master_temp
(sur Github, changez la "Default branch").
git push origin :master # delete the original master branch from Bitbucket
git checkout master
git reset master_temp # reset master to master_temp (removing the bad commit)
git push origin master # re-upload master to bitbucket
Maintenant, allez sur Bitbucket, et vous devriez voir l'historique que vous voulez. Vous pouvez maintenant aller sur la page des paramètres et changer la branche principale en master
.
Ce processus fonctionnera également avec toute autre modification de l'historique (par ex. git filter-branch
). Vous devez juste vous assurer de réinitialiser les commits appropriés, avant que le nouvel historique ne soit séparé de l'ancien.
modifier Le problème est qu'apparemment vous n'avez pas besoin de faire tout cela sur github, car vous pouvez forcer une branche de réinitialisation .
Traiter avec des collaborateurs gênants
La prochaine fois que quelqu'un essaiera de tirer de votre dépôt, (s'il a déjà tiré le mauvais commit), le tirage échouera. Il devra manuellement revenir à un commit antérieur à la modification de l'historique, puis effectuer un nouveau tirage.
git reset HEAD^
git pull
S'ils ont fait le mauvais coup, et engagé par-dessus alors ils devront réinitialiser, et ensuite git cherry-pick
les bons commits qu'ils veulent créer, recréant effectivement la branche entière sans le mauvais commit.
S'ils n'ont jamais effectué le mauvais commit, alors tout ce processus ne les affectera pas, et ils pourront effectuer le commit normalement.