{"id":18451983,"url":"https://github.com/skynewz/git-init","last_synced_at":"2025-04-19T23:22:08.978Z","repository":{"id":144291277,"uuid":"254153276","full_name":"SkYNewZ/git-init","owner":"SkYNewZ","description":"A short guide to Git rebase command","archived":false,"fork":false,"pushed_at":"2020-04-08T17:18:27.000Z","size":11,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-16T14:23:21.997Z","etag":null,"topics":["git","guide"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SkYNewZ.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-08T17:16:37.000Z","updated_at":"2020-04-09T14:12:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"2a857b30-0799-40e8-b7a5-bc365c93a62b","html_url":"https://github.com/SkYNewZ/git-init","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SkYNewZ%2Fgit-init","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SkYNewZ%2Fgit-init/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SkYNewZ%2Fgit-init/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SkYNewZ%2Fgit-init/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SkYNewZ","download_url":"https://codeload.github.com/SkYNewZ/git-init/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249554318,"owners_count":21290407,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["git","guide"],"created_at":"2024-11-06T07:29:50.530Z","updated_at":"2025-04-19T23:22:08.961Z","avatar_url":"https://github.com/SkYNewZ.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Git init !\n\n![project logo](https://raw.githubusercontent.com/prahladyeri/enforce-git-message/master/logo.png)\n\nSimple repo d'exemple pour comprendre et appliquer le `rebase` avancé.\n\nCe guide couvre les commands avancées `fixup`, `squash`, `reword` ou `edit` (pour les plus courageux), et même le changement d'ordre.\n\n## Démarrer\n\nAprès l'avoir cloner, vous alleer obtenir un historique qui ressemble à ceci:\n\n```\n5121c59 (HEAD -\u003e master) feat(fichier6): J'ai oublié de release ça AVANT la feature 'fichier4'\ne97ebd6 feat(fichier5): Noukjqsdj fichier 5\n5ab2953 feat(fichier4): wip\nd76b9c9 feat(fichier4): wip\n685250d feat(fichier4): fix typo\n135a5d3 feat(fichier4): Feature numéro 4 yeah!\n257b70d feat(fichier1): Fix fichier1\nbe54579 feat(fichier2): fix typo\na3ba77b feat(fichier2): Nouvelle feature!\n20b099b feat(fichier1): Initial commit\n```\n\nOn peut voir ici, 6 features (nom choisi arbitrairement). Néanmoins le commiter s'est un peu emmêlé les pinceaux…\nLe but du jeu, si vous le voulez bien, est de remettre les choses dans l'ordre, ou du moins dans un ordre cohérent, en atteignant un historique comme celui-ci:\n\n```\ne97ebd6 (HEAD -\u003e master) feat(fichier5): Nouveau fichier 5\n135a5d3 feat(fichier4): Feature numéro 4 yeah!\n5121c59 feat(fichier6): J'ai oublié de release ça AVANT la feature 'fichier4'\na3ba77b feat(fichier2): Nouvelle feature!\n20b099b feat(fichier1): Initial commit\n```\n\n\u003e Il faut ici renommer le commit…\n\nAvec pour fichier dans le répertoire courant:\n\n```\n-rw-r--r--  1 quentin  staff  2061 Apr  8 18:51 README.md\n-rw-r--r--  1 quentin  staff    45 Apr  8 18:37 file1\n-rw-r--r--  1 quentin  staff    85 Apr  8 18:37 file2\n-rw-r--r--  1 quentin  staff    44 Apr  8 18:37 file4\n-rw-r--r--  1 quentin  staff    44 Apr  8 18:37 file5\n-rw-r--r--  1 quentin  staff    44 Apr  8 18:37 file6\n```\n\n\u003e Notez la disparition du fichier 3\n\n## Pourquoi je comprend plus rien à l'historique obtenu ?\n\nEn effet, pour être sur un remote `origin` qui pointe sur `SkYNewZ/git-init`. Etant donné que vous avez intéragi sur votre repository Git local, les commits distants sont toujours visibles.\n\nMais alors que faire ?\n\n## Aller plus loin\n\n## L'option edit\n\nL'option `edit` du `rebase` vous permet de modifier le contenu d'un commit: en retirer des fichiers, en ajouter ou les modifier.\n\nEssaie de créer un fichier, puis de le placer **dans** le commit `Nouvelle feature!`.\n\n## Se forcer à faire de jolis messages de commits\n\nIl exite dans Git des hooks. Ce sont des scripts (vides par défaut) qui sont reliés à des évènements de Git. Par exemple:\n\n- Avant de valider\n- Après avoir validé\n- Avant de pousser\n- etc…\n\nLes Git hooks sont faits pour vous faciliter gestes répétitifs: linter du code avant de commit, éxécution des tests unitaires avant de commit, s'imposer une nomenclature pour les messages.\nBien que ce soient de simples scripts shell (ou Python, ou binaire, tant que c'est éxécutable) ils se doivent de rester simples.\n\nPour celles et ceux qui seraient intéréssés par le fait s'imposer une nomenclature de message de commit, il existe ceci, un exemple de Git hook, fait en Python qui renvoie un exit code 1 si le message ne respecte pas https://www.conventionalcommits.org/.\n\n\u003e https://github.com/prahladyeri/enforce-git-message\n\nCela permet de générer dee jolis changelogs, automatiquement, rien qu'en lisant vos messages !\n\n\u003e https://github.com/git-chglog/git-chglog\n\n### Le mot de la fin\n\nMerci. Ne faites pas de rebase sur une branche distante protégée. Merci. 😛\nFaites votre tambouille sur votre branche de développement, c'est la votre. Faites des `WIP1`, `WIP2`, `WIP3`… a tout va, c'est votre branche et le rebase est fait pour ça: **s'assurer que les commits poussés sont propres en terme de contenu et de message, qu'ils aient une cohérence entre eux**. Considérer la `master` comme un point de non retour.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskynewz%2Fgit-init","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskynewz%2Fgit-init","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskynewz%2Fgit-init/lists"}