2017-10-06 10 views
0

Je me trouve souvent sur une branche de fonctionnalité, après avoir commis un changement. Puis, je comprendre que je dois faire un changement, donc je:Git: ajout, validation et rebasculement/écrasement dans la même opération

  1. Faire le changement
  2. Ajouter toutes les modifications de fichiers à l'index à l'aide git add -A
  3. Valider les modifications en utilisant git commit -m <commit message>
  4. rebasage la les changements et les deux derniers squashing commits en utilisant git rebase -i HEAD~2 et squashing le plus récent commettre, de sorte que je me retrouve avec 1 commettre

Ceci est un flux que j'utilise souvent beaucoup, mais il se sent q trop lourd et manuel. Y a-t-il une façon plus intelligente de le faire, ou est-il plus courant de simplement créer des fonctions shell ou des alias pour ce genre de tâche? Je parle les étapes 2 à 4.

Répondre

3

la façon de modifier une simple commettez Peut-être que vous venez de faire à la tête d'une branche de fonction serait de modifier qui commettent via:

git commit --amend 'your commit message here' 

Git commit modifier fonctionne en créant un nouveau commit, fonctionnellement identique à l'ancien, plus vos nouveaux changements, et en remplaçant l'ancien commit HEAD par le nouveau. Notez que cela réécrit l'historique, donc il ne conviendrait pas aux branches que vous avez déjà poussées et qui ont déjà été tirées par d'autres personnes. Mais ce n'est pas pire à cet égard que votre approche actuelle de rebasage.

Comme solution de rechange à votre approche de rebasage intensif, il existe un moyen beaucoup plus simple d'écraser les deux meilleurs commits d'une branche. Vous pouvez effectuer une réinitialisation logicielle, suivi d'un commit:

git reset --soft HEAD~2 
git commit -m 'made a small change to latest commit' 

Git reset travaux doux en déplaçant la tête Backpointer deux commits (dans ce cas), tout en laissant à la fois le répertoire de travail et la scène comme ils l'étaient. Cela a essentiellement pour effet de mettre en scène le travail effectué lors de votre première validation, plus le deuxième commit de validation, en plus de la validation immédiatement avant votre première validation. Ensuite, lorsque vous commettez ce travail, vous avez effectivement réduit tout à un seul commit.

Mais la plupart du temps, je me trouve en utilisant commettre modifier plus que réinitialiser doux pour gérer cette situation.

+0

N'avez pas essayé, mais peut-être '--amend' et' -all' fonctionnent ensemble, donc vous pouvez omettre le 'git add' s'il ne s'agit que de modifications à des fichiers existants? –

+0

@MatthewStrawbridge Je n'ai jamais entendu parler de ça, mais faire 'git add -A' une fois ne me dérange pas tellement :-) –

+1

Utiliser' --amend' est généralement la bonne réponse. Je trouve utile de noter que cela fonctionne, en substance, en écartant le commit actuel et en substituant le nouveau commit modifié à sa place. Comme vous le constatez, cela "réécrit l'histoire" (prétend que votre commit "modifié" ne s'est jamais produit: * ne regardez pas celui-là, regardez plutôt ce nouveau! *). Mais c'est un cas extrêmement commun: * Travail, travail, travail; tester. Yay, bug corrigé! Commettre! Exécutez la suite de tests complète. Oups, j'ai oublié le cas spécial! Réparer, modifier la validation, relancer la suite de tests complète ... * – torek