Modifica un messaggio di commit in Windows SourceTree (già trasferito in remoto)


203

Come posso modificare un messaggio di commit errato in SourceTree senza toccare la riga di comando?

Dettagli aggiuntivi:

  • Questo non è l'ultimo commit.
  • Tutto era già stato inviato a Bitbucket.
  • Questo è un repository privato e io sono l'unico collaboratore.
  • Non mi dispiace perdere nessuno dei precedenti commit, in quanto posso commetterli nuovamente in qualsiasi momento.
  • Non voglio tuttavia perdere alcuna modifica del codice mai effettuata.

Risultato:

  • Poiché al momento sembra impossibile secondo i tuoi commenti e le tue risposte, ho intenzione di creare un nuovo repository e ricominciare tutto da capo. Grazie a tutti per il vostro aiuto!

Risposte:


427

Ecco i passaggi per modificare il messaggio di commit di un commit precedente ( che non è il commit più recente ) utilizzando SourceTree per Windows versione 1.5.2.0 :

Passo 1

Selezionare il commit immediatamente prima del commit che si desidera modificare. Ad esempio, se voglio modificare il commit con il messaggio "FOOBAR!" quindi devo selezionare il commit che precede:

Selezionando commit prima di quello che voglio modificare.

Passo 2

Fare clic con il tasto destro del mouse sul commit selezionato e fare clic Rebase children...interactively:

Selezionando "Rebase bambini interattivamente".

Passaggio 3

Seleziona il commit che desideri modificare, quindi fai clic Edit Messagein basso. In questo caso, seleziono il commit con il messaggio "FOOBAR!":

Seleziona il commit che desideri modificare.

Passaggio 4

Modifica il messaggio di commit, quindi fai clic su OK. Nel mio esempio, ho aggiunto "SHAZBOT! SKADOOSH!"

Modifica il messaggio di commit

Passaggio 5

Quando ritorni alla finestra di rebase interattiva, fai clic su OKper terminare il rebase:

Fai clic su OK per terminare.

Passaggio 6

A questo punto, dovrai forzare le tue nuove modifiche poiché hai rinnovato gli impegni che hai già spinto. Tuttavia, l'attuale versione 1.5.2.0 di SourceTree per Windows non ti consente di forzare il push attraverso la GUI, quindi per farlo dovrai usare Git dalla riga di comando.

Fare clic Terminalsulla GUI per aprire un terminale.

Fai clic su Terminale

Passaggio 7

Dal terminale force-push con il seguente comando,

git push origin <branch> -f

dov'è <branch>il nome del ramo che si desidera spingere e -fsignifica forzare la spinta. La spinta della forza verrà sovrascritta tuoi commit sul tuo repository remoto, ma va bene nel tuo caso poiché hai detto che non stai condividendo il tuo repository con altre persone.

Questo è tutto! Hai finito!


4
I passaggi sono sostanzialmente gli stessi anche sulla versione per Mac.
race_carr,

3
Attenzione: se vuoi iniziare il tuo messaggio di commit con # questo non funzionerà, git lo tratta come un commento e ti dice che il tuo messaggio di commit è vuoto!
Daniel Edholm Ignat,

1
"Ecco fatto! Hai finito!" - È così facile perché non so cosa, come può essere una cattura di un coniglio. Invece di creare funzionalità di programma, per una situazione così importante e che vede spesso. Quando hai appena fatto un refuso in fretta, devi ripristinare head e creare di nuovo il nuovo commit.
Rantiev,

67
Divertente - Mi chiedo perché non facciano una semplice opzione "Modifica messaggio di commit".
Jonathan Aquino,

1
Force Push è ora disponibile tramite la GUI. Altrimenti PERFETTO :-)
LaTisha

43

Sulla versione 1.9.6.1. Per commit UnPushed.

  1. Fai clic sulla descrizione precedentemente impegnata
  2. Fai clic sull'icona Commit
  3. Inserisci un nuovo messaggio di commit e seleziona " Ammendi ultimo commit " dal menu a discesa Opzioni di commit .
  4. Commetti il ​​tuo messaggio.

13

Se il messaggio di commento include caratteri non inglesi , usando il metodo fornito dall'utente 456814, tali caratteri saranno sostituiti da punti interrogativi. (testato con sourcetree Ver2.5.5.0)

Quindi devo usare il seguente metodo.

ATTENZIONE : se il commit è stato eseguito da altri membri, le modifiche riportate di seguito potrebbero causare caos.

Passaggio 1 : nella finestra principale di sourcetree, individuare la scheda repository e fare clic sul pulsante " terminale " per aprire la console di comando git.

Step2 :

[Situazione A] : il commit dell'obiettivo è l'ultimo.

1) Nella console di comando git, immettere

git commit --amend -m "new comment message"

2) Se il commit target è stato spinto in remoto, è necessario spingere di nuovo con la forza. Nella console dei comandi git, immettere

git push --force

[Situazione B] : il commit dell'obiettivo non è l'ultimo.

1) Nella console di comando git, immettere

git rebase -i HEAD~n

Serve a schiacciare gli ultimi n commit. ad es. se si desidera modificare il messaggio prima dell'ultimo, n è 2. Questo comando aprirà una finestra vi, la prima parola di ogni riga è " pick " e si cambia il "pick" in " reword " per la riga vuoi modificare. Quindi, inserisci :wqper salvare e uscire dalla finestra vi. Ora, verrà aperta una nuova finestra vi, in questa finestra inserisci il tuo nuovo messaggio. Utilizzare anche :wqper salvare e uscire.

2) Se il commit target è stato spinto a distanza, è necessario spingere di nuovo con la forza. Nella console dei comandi git, immettere

git push --force


Infine : nella finestra principale di sourcetree, premi F5per aggiornare.


12

Aggiornare

Nota: questa risposta è stata originariamente scritta per quanto riguarda le versioni precedenti di SourceTree per Windows ed è obsoleta.

Vedi la mia nuova risposta per l'attuale versione di SourceTree per Windows, 1.5.2.0 . Lascio questa risposta alle spalle per scopi storici.

Risposta originale

dato che sono su Windows non ho uno strumento da riga di comando né so come usarne uno :( È l'unico modo per risolverlo? La GUI non copre tutte le funzioni di git? - Poster originale

Per quanto riguarda le GUI di Git, no, non coprono tutte le funzioni di Git . Non si avvicinano nemmeno . Ti suggerisco di dare un'occhiata a una delle risposte in Come posso modificare un messaggio di commit errato in Git? , Git è abbastanza flessibile che ci sono più soluzioni ... dalla riga di comando.

SourceTree potrebbe effettivamente essere già dotato della shell bash msysgit o potrebbe essere in grado di utilizzare la shell dei comandi standard di Windows. Ad ogni modo, lo apri da SourceTree facendo clic sul pulsante Terminale:

inserisci qui la descrizione dell'immagine

Puoi impostare quale terminale SourceTree utilizza (bash o Windows) qui:

inserisci qui la descrizione dell'immagine

Un modo per risolvere il problema in SourceTree

Detto questo, ecco un modo per farlo in SourceTree. Dal momento che hai menzionato nei commenti che non ti dispiace "tornare al commit difettoso" (con il quale presumo che in realtà intendi resettare, che è un'operazione diversa in Git), allora ecco i passaggi:

  1. Eseguire un hard reset in SourceTree per il commit errato facendo clic con il tasto destro su di esso e selezionando Reset current branch to this commite selezionando l'opzione di hard reset dal menu a discesa.inserisci qui la descrizione dell'immagine
  2. Fai clic sul pulsante Commit, quindi
  3. Fai clic sulla casella di controllo in basso che dice "Modifica ultimo commit". inserisci qui la descrizione dell'immagine
  4. Apporta le modifiche desiderate al messaggio, quindi fai di nuovo clic su Commit. Ecco!

Per quanto riguarda questo commento :

se non è possibile perché è già stato inviato a Bitbucket, non mi dispiacerebbe creare un nuovo repository e ricominciare da capo.

Questo significa che sei l'unica persona che lavora sul repository? Questo è importante perché non è banale cambiare la cronologia di un repository (come modificando un commit) senza causare problemi ai tuoi collaboratori. Tuttavia, supponendo che tu sia l'unica persona che lavora sul repository, la prossima cosa che vorresti fare è forzare a spingere la cronologia modificata sul telecomando.

Tieni presente, tuttavia, che poiché hai eseguito un hard reset del commit errato, la forzatura della spinta ti fa perdere tutto il lavoro che lo segue in precedenza. Se va bene, allora potresti aver bisogno di usare il seguente comando dalla riga di comando per eseguire il push forzato, perché non ho trovato un'opzione per farlo in SourceTree:

git push remote-repo head -f

Questo presuppone anche che BitBucket ti consentirà di forzare il push verso un repository.

Tuttavia, dovresti davvero imparare a usare Git dalla riga di comando, ti renderà più esperto in Git. Suggerimento, usa msysgit e attiva la modalità Modifica rapida nelle proprietà del terminale, in modo da poter fare doppio clic per evidenziare una riga di testo, fare clic con il tasto destro per copiare e fare nuovamente clic con il tasto destro per incollare. È abbastanza veloce.

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.