En résumé : on peut faire un cherry-pick d'un commit d'une branche dans une autre, puis faire un merge de ces 2 branches et cela devrait fonctionner sans duplication. Sinon, il faudra régler le conflit à l'ancienne.
Pour éviter aussi la duplication dans l'historique, on peut utiliser "rebase".
git reflog
git reset HEAD@{index before the amend}
git commit ...
Something wrong
git reflog
# you will see a list of every thing you've done in git, across all branches!
# each one has an index HEAD@{index}
# find the one before you broke everything
git reset HEAD@{index}
# magic time machine
I accidentally committed to the wrong branch!
# undo the last commit, but leave the changes available
git reset HEAD~ --soft
git stash
# move to the correct branch
git checkout name-of-the-correct-branch
git stash pop
git add . # or add individual files
git commit -m "your message here"
# now your changes are on the correct branch
Oui, quelqu'un paie un nom de domaine chaque année pour ça. Merci quand même :-)
Excellent petit outil pour browser des repo Git via le Web.
Pour partager un repository Git entre Windows et Linux, j'utilise ces configurations dans mon ~/.gitconfig.
Pour Windows (on ne touche pas aux permissions des fichiers, on transforme les éventuels \r\n en \n à chaque commit mais sans les modifier dans notre workspace)
git config --global core.filemode false
git config --global core.autocrlf true
Pour Linux (on commit aussi les permissions des fichiers, et on transforme les éventuels \r\n en \n dans notre workspace)
git config --global core.filemode true
git config --global core.autocrlf input
Et je vérifie que ces paramètres ne sont pas présents dans les .git/config de chacun de mes projets.
A utiliser avec parcimonie, mais c'est bien pratique.
Y a plus qu'à !
Ma configuration de Git.
Très bonne ressource : Linux, Symfony2, SVN, Git, ...
via nicosombs
Comment supprimer un tag dans Git :
git tag -d myTag
Comment supprimer un tag remote dans Git (i.e. qui a été pushé sur un repository remote. Dans la plupart des cas il n'y en a qu'un seul nommé "origin") :
git push origin :refs/tags/myTag
Pour mémoire, pour pusher un tag sur le remote :
git push origin myTag
Ouf !
Le livre Git (en français comme en anglais) est toujours aussi chouette. Aujourd'hui c'est une bonne explication sur les tags. Pour plus d'info : git help tag.
(via http://sebsauvage.net/links/?o0AQ0w)
Depuis que je suis obligé de jouer avec les repository "remote" avec Git (puisqu'on je suis sur un projet qui n'a pas encore de repository remote centralisé à la Github, donc on s'échange des des repository "bare" par email), je maîtrise bien mieux Git ! Et je comprends beaucoup mieux ce que signifie réellement un pull/push, même un commit et les 3 états possibles des fichiers locaux. C'est incroyable de souplesse ce système.
Un bon use case d'amélioration d'un composant PHP existant et de la manière de pusher la modification (et de l'utiliser). Si ça fonctionne avec PHP/Composer, Git et Github, cela reste applicable à d'autres technologies.
Du coup j'ai traduit et agrémenté l'article.
Toujours utile. Mais risqué lorsque le commit a déjà été pushé et que l'on travaille à plusieurs. Quand 40 personnes commit quotidiennement, il faut forcer son push à 2h du mat' pour éviter la panique :D
En parlant de Pro Git : ce lien permet de télécharger la version française en PDF, ePub, et autre (version de mars 2012, ça a peut-être changé depuis).
La version "officielle" ne propose que la version anglaise : http://git-scm.com/book
Quand EGit d'Eclipse fait défaut, heureusement qu'il y a ce genre de ressources (en anglais c'est ici : http://git-scm.com/book/en/Git-Branching-Basic-Branching-and-Merging) pour éviter de faire des bêtises !