Come rimuovere i commit da una richiesta pull


105

Ho fatto una richiesta pull ma dopo ho fatto alcuni commit sul progetto localmente che ha finito di inquinare la mia richiesta pull, ho provato a rimuoverla ma senza fortuna.

Ho trovato alcune domande simili su StackOverflow ma non riesco ad applicare cosa c'è dentro. È la mia prima richiesta pull su GitHub, quindi è un po 'strano per me come funziona tutto questo.

Il commit evidenziato è quello di cui ho bisogno per mantenere e rimuovere tutte le altre cose. Diventa il quarto commit nella storia perché creo alcune cose di merge.

inserisci qui la descrizione dell'immagine

il mio registro git inserisci qui la descrizione dell'immagine

Qualcuno può spiegare cosa sta succedendo e come risolvere questo problema?


2
Devi ribasare e solo "scegliere" il commit "aggiunto da github" (cioè commentare le righe per ogni altro commit)
Robbie Averill

1
rebase quale ramo su quale ramo puoi aggiungere ulteriori spiegazioni.
umiliato

what branch= il ramo su cui stai lavorando, onto what branch= il ramo a cui stai facendo richiesta
Robbie Averill

Ho spiegato cosa ha suggerito @Robbie Averill nella mia risposta. È strano che nessuno abbia scritto una risposta spiegando questo fino ad ora.
ferit

Risposte:


108

Hai diverse tecniche per farlo.

Questo post - leggi la parte sul ripristino spiegherà in dettaglio cosa vogliamo fare e come farlo.

Ecco la soluzione più semplice al tuo problema:

# Checkout the desired branch
git checkout <branch>

# Undo the desired commit
git revert <commit>

# Update the remote with the undo of the code
git push origin <branch>

Il comando revert creerà un nuovo commit con l' annullamento del commit originale.


2
Funziona anche quando abbiamo biforcato il progetto da un'altra persona e vogliamo rimuovere alcuni commenti nella richiesta pull?
Dr.jacky

107

Le persone non vorrebbero vedere un commit sbagliato e un commit di ripristino per annullare le modifiche del commit sbagliato. Questo inquina la storia delle commesse.

Ecco un modo semplice per rimuovere il commit sbagliato invece di annullare le modifiche con un commit di ripristino.

  1. git checkout my-pull-request-branch

  2. git rebase -i HEAD~n// dove nè il numero degli ultimi commit che desideri includere nel rebase interattivo.

  3. Sostituisci pickcon dropper i commit che desideri eliminare.
  4. Salva ed esci.
  5. git push --force

8
questo ha funzionato per me come un fascino. Ho avuto un sacco di commit che non avrebbero dovuto essere nel PR. L'ho semplicemente ribasato interattivamente, ho abbandonato quei commit e li
ho

1
Dovresti comunque sincronizzarti con il master remoto prima di avviare un pr, no?
ferit

5
Per spingere dovevo fare: git push origin HEAD:myBranch --force. Ma per il resto fantastico e utile.
ScottyBlades,

@ScottyBlades Ho omesso quella parte intenzionalmente perché è fuori portata. Se non hai impostato il ramo di tracciamento, devi impostarlo o, come hai fatto, spingere esplicitamente.
ferit

4
Questo è utile anche quando vuoi correggere un PR aperto in GitHub, devi solo essere in grado di eseguire una spinta forzata
Vladimir Hidalgo

6

Se stai rimuovendo un commit e non vuoi mantenere le sue modifiche, @ferit ha una buona soluzione.

Se vuoi aggiungere quel commit al ramo corrente, ma non ha senso far parte del pr corrente, puoi invece fare quanto segue:

  1. uso git rebase -i HEAD~n
  2. Scambia il commit che desideri rimuovere nella posizione più bassa (più recente)
  3. Salva ed esci
  4. utilizzare git reset HEAD^ --softper annullare il commit delle modifiche e riportarle in uno stato graduale.
  5. utilizzare git push --forceper aggiornare il ramo remoto senza il commit rimosso.

Ora avrai rimosso il commit dal tuo telecomando, ma avrai ancora le modifiche localmente.


2

Quindi fai quanto segue,

Diciamo che il nome del tuo ramo è my_branch e questo ha i commit extra.

  1. git checkout -b my_branch_with_extra_commits (Mantenere questo ramo salvato con un nome diverso)
  2. gitk (Apre la console git)
  3. Cerca il commit che vuoi mantenere. Copia lo SHA di quel commit in un blocco note.
  4. git checkout my_branch
  5. gitk (Questo aprirà la console git)
  6. Fare clic con il pulsante destro del mouse sul commit a cui si desidera ripristinare (Stato prima delle modifiche) e fare clic su " reset branch to here"
  7. Fai un git pull --rebase origin branch_name_to _merge_to
  8. git cherry-pick <SHA you copied in step 3. >

Ora guarda la cronologia dei commit della filiale locale e assicurati che tutto sia a posto.


0

Questo è ciò che mi ha aiutato:

  1. Crea un nuovo ramo con quello esistente. Chiamiamo quello esistente branch_olde quello nuovo come branch_new.

  2. Ripristina branch_newuno stato stabile, quando non hai avuto alcun problema a eseguire il commit. Ad esempio, per metterlo al livello del tuo master locale, procedi come segue:

    git reset —hard master git push —force origin

  3. cherry-picki commit da branch_oldintobranch_new

  4. git push
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.