Git interactive rebase pas de commits à choisir

105

Je suis maître et je l'ai fait rebase -i <my_branch>

Je l'ai:

noop

# Rebase c947bec..7e259d3 onto c947bec
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x <cmd>, exec <cmd> = Run a shell command <cmd>, and stop if it fails
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

Je voudrais choisir certains engagements pas tous car certains d'entre eux ne sont pas les bienvenus. Aussi comment travaillez-vous lorsque vous souhaitez conserver certains fichiers ou des modifications toujours «locales» dans une branche? Y a-t-il une aide comme .gitignore?

Lukasz
la source

Réponses:

85

Comme un rebase non interactif, vous devez rebase sur un commit particulier.

Avec un rebase non interactif, si vous fournissez un ancêtre direct du commit actuel, vous ne changez rien; avec un rebase interactif, vous pouvez éditer les commits après le commit sur lequel vous rebasez, même si le commit est un ancêtre direct de votre commit actuel, mais vous devez spécifier ce commit à partir duquel vous voulez éditer.

Je ne connais pas les détails de votre situation mais vous voudrez peut-être quelque chose comme ceci:

# Opportunity to edit or prune commits between origin/master and current branch
git rebase -i origin/master

ou

# Edit some of the last ten commits
git rebase -i HEAD~10 # Note that ~10 uses a tilde("~") not a dash("-"_) !
CB Bailey
la source
L'utilisation de la HEAD~*syntaxe a fonctionné pour moi, mais la première n'a pas fonctionné.
Dev Yego
25

rebase -isans une plage de validation n'affichera aucun commit. pour rebaser les 7 derniers commits, disons, utilisez ce qui suit:

git rebase -i HEAD~7

attention cependant, cela réécrira l'histoire. ne le faites pas, si les commits sont déjà poussés


pour votre deuxième question: ayez une branche avec vos modifications (essentiellement une branche de configuration) et fusionnez régulièrement les autres branches en elle. de cette façon, les modifications ne seront pas déplacées vers d'autres branches

tricot
la source
9

Lorsque vous utilisez git rebase -i, vous devez généralement spécifier, depuis quel commit voulez-vous effectuer le rebase. Donc, si, par exemple, vous souhaitez supprimer certains des commits parmi les 10 derniers de la branche actuelle, vous feriez:

git rebase -i HEAD~10
svick
la source
6

Comme d'autres l'ont mentionné, vous devez spécifier une plage de validation.

git rebase -i <latest-commit-to-be-retained>

(En supposant que vous soyez sur la même branche que le commit à éditer) -

Pour spécifier les commits, vous pouvez utiliser les raccourcis HEAD ~ 5 ou utiliser la somme de contrôle sha (que vous pouvez utiliser git log)

En fait, n'importe quel commit fera l'affaire s'il est antérieur / ancêtre des commits que vous voulez supprimer / éditer / reformuler dans l'arborescence. Cela listera tous les commits depuis le <latest-commit-to-be-retained>dans l'éditeur (défini dans votre git config). Dans la liste, pour supprimer un commit, supprimez simplement cette ligne particulière, enregistrez et quittez (vi habbits :)) le fichier + éditeur, et faitesgit rebase --continue

Pour la deuxième réponse, je suis d'accord avec knittl

avoir une branche avec vos modifications (essentiellement une branche de configuration) et y fusionner régulièrement les autres branches. de cette façon, les modifications ne seront pas déplacées vers d'autres branches

0xc0de
la source