web-dev-qa-db-fra.com

Git interactif rebase aucun engagement à choisir

Je suis maître et j'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 quelques commits pas tous car certains d'entre eux ne sont pas les bienvenus. De plus, comment travaillez-vous lorsque vous souhaitez conserver certains fichiers ou modifications toujours "locaux" dans une branche? Y a-t-il une aide comme .gitignore?

91
Lukasz

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

Avec un rebase non interactif, si vous fournissez un ancêtre direct de la validation actuelle, vous ne changez rien; avec un rebase interactif, vous pouvez modifier les validations après la validation sur laquelle vous effectuez le rebasage, même si la validation est un ancêtre direct de votre validation actuelle, mais vous devez spécifier cette validation à partir de laquelle vous souhaitez la modifier.

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

# 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("-"_) !
73
CB Bailey

rebase -i sans plage de validation n'affichera aucune validation. pour rebaser le dernier, disons, 7 commits, 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: avoir une branche avec vos modifications (fondamentalement une branche de configuration) et fusionner régulièrement les autres branches en elle. de cette façon, les modifications ne seront pas déplacées vers d'autres branches

24
knittl

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 dans la branche actuelle, vous feriez:

git rebase -i HEAD~10
8
svick

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 êtes sur la même branche que le commit à éditer) -

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

En fait, toute validation fera l'affaire si elle est antérieure/ancêtre aux validations que vous souhaitez supprimer/modifier/reformuler dans l'arborescence. Ceci listera tous les commits depuis le <latest-commit-to-be-retained> dans l'éditeur (défini dans votre configuration git). Dans la liste, pour supprimer un commit, supprimez simplement cette ligne particulière, enregistrez et quittez (vi habbits :)) le fichier + éditeur, et faites git 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

4
0xc0de