Git rebase interattivo non si impegna a scegliere


105

Sono in master e l'ho fatto rebase -i <my_branch>

Prendi questo:

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.
#

Vorrei scegliere alcuni commit non tutti in quanto alcuni di essi non sono i benvenuti. Inoltre come si fa a lavorare quando si vogliono mantenere dei file o modifiche sempre "locali" a qualche ramo? C'è qualche aiutante come .gitignore?

Risposte:


85

Come un rebase non interattivo, devi rebase su un particolare commit.

Con un rebase non interattivo, se fornisci un antenato diretto del commit corrente, non stai cambiando nulla; con un rebase interattivo puoi modificare i commit dopo il commit su cui stai ribasando, anche se il commit è un antenato diretto del tuo commit corrente, ma devi specificare questo commit da cui vuoi modificare in avanti.

Non conosco i dettagli della tua situazione ma potresti volere qualcosa del genere:

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

o

# Edit some of the last ten commits
git rebase -i HEAD~10 # Note that ~10 uses a tilde("~") not a dash("-"_) !

L'uso della HEAD~*sintassi ha funzionato per me, ma il primo no.
Dev Yego

25

rebase -isenza un intervallo di commit non verrà visualizzato alcun commit. per ribasare gli ultimi, diciamo, 7 commit usa quanto segue:

git rebase -i HEAD~7

attenzione però, che questo riscriverà la storia. non farlo, se i commit sono già stati inviati


per la tua seconda domanda: crea un ramo con le tue modifiche (fondamentalmente un ramo di configurazione) e unisci regolarmente gli altri rami al suo interno. in questo modo le modifiche non si sposteranno su altri rami


9

Quando stai usando git rebase -i, di solito devi specificare, poiché quale commit vuoi eseguire il rebase. Quindi, se, ad esempio, vuoi rimuovere alcuni dei commit tra gli ultimi 10 nel ramo corrente, dovresti fare:

git rebase -i HEAD~10

6

Come altri hanno già detto, è necessario specificare un intervallo di commit.

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

(Supponendo che tu sia sullo stesso ramo del commit da modificare) -

Per specificare i commit, puoi usare le scorciatoie HEAD ~ 5 o usare sha checksum (che puoi ottenere git log)

In effetti, qualsiasi commit andrà bene se è precedente / antenato ai commit che vuoi eliminare / modificare / riformulare nell'albero. Questo elencherà tutti i commit dal<latest-commit-to-be-retained> dall'editor (definito nel tuo git config). Dall'elenco, per eliminare un commit, elimina quella particolare riga, salva ed esci (vi habbits :)) dal file + editor, e faigit rebase --continue

Per la seconda risposta, sono d'accordo con knittl

avere un ramo con le tue modifiche (fondamentalmente un ramo di configurazione) e unisci regolarmente gli altri rami in esso. in questo modo le modifiche non si sposteranno su altri rami

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.