web-dev-qa-db-fra.com

Git rebase interactif les n derniers commits

J'ai effectué un tas de validations non poussées dans ma branche de fonctionnalités et je souhaite maintenant réorganiser et écraser partiellement les validations d'appartenance visuellement. Je pense que la solution réside en quelque sorte dans le Git interactif, mais comment l'invoquer?

$ git rebase --interactive --onto <the-ID-of-the-first-commit-to-rewrite>

apparaît simplement le VI avec un

noop

contenu suivi d'informations commentées. Après avoir quitté, ma tête est réinitialisée au commit spécifié.

Comment déclencher correctement le rebase interactif pour modifier les validations depuis une certaine validation?

23
Thomas S.

tu devrais utiliser

git rebase --interactive <sha1>

<sha1> devrait pas être le sha du premier commit que vous voulez réécrire, mais le sha du commit juste avant.

si votre histoire ressemble à ceci:

pick 43576ef last commit
...
pick 5116d42 first commit to rewrite
pick cb85072 last good commit

vous pouvez alors indiquer le commit sur lequel rebaser:

git rebase -i cb85072
git rebase -i 5116d42^

  • ^ signifie le commit juste avant.
  • -i est juste l'abréviation de --interactive
29
Chris Maes

Vous pouvez également prendre du recul par rapport à votre dernier commit par un certain nombre de commits. Par exemple, si vous souhaitez rebaser les 5 derniers commits, vous pouvez utiliser cette commande: git rebase -i HEAD~5.

19

Pour revoir et réécrire les derniers n commits, utilisez:

git rebase -i HEAD~n

p, pick = utiliser commit

f, fixup = comme "squash", mais jetez le message du journal de ce commit

https://www.freecodecamp.org/forum/t/how-to-squash-multiple-commits-into-one-with-git-squash/13231

6
Golfer

La réponse acceptée est juste

Cependant, compter n commits pour écraser et choisir l'id de commit pour rebase est délicat

git rebase -i HEAD~[N]   // N is the number of commits, starting from the most recent one

enter image description here

git rebase -i HEAD~[7]

Mais si vous avez des tonnes de commit pour squash

git rebase -i [commit-id] // [commit-id] is the hash of the commit just before the first one 

git rebase -i 6394dc


Inspiré par

3

L'action rebase dans votre instruction me manque:

git rebase -i <id-of-commit>
1
Bustikiller