2010-08-31 1 views
11

Il mio solito flusso di lavoro con git è creare un nuovo ramo di funzionalità, lavorare con frequenti commit e quindi unirmi nuovamente al ramo di sviluppo quando la funzione funziona e/o stabile.I conflitti di unione rovinano il mio messaggio di commit mentre lo squashing commette

In genere, quando eseguo il comando git merge --squash feature-branch, viene visualizzato un messaggio di tipo "schiacciamento del messaggio seguente" che viene compilato automaticamente con tutti i messaggi di commit dal ramo di funzione.

Tuttavia, se sono presenti conflitti di unione (ad esempio, ho completato e unito un'altra funzione mentre si lavora su questo), sembra che perda tutti i miei messaggi di commit dal ramo. Il messaggio di commit compilato automaticamente riempie i conflitti, ma non i messaggi di commit. Dove sono finiti i miei messaggi di commit? Posso riaverli?

+0

Perché zucca a tutti? Potresti semplicemente usare 'rebase --interactive' per ripulire, se consideri i tuoi commit troppo frequenti e disordinati, allora fai una normale unione - in questo modo non perdi la cronologia. – Cascabel

risposta

4

Questo non risponde alla tua domanda direttamente, ma dovresti essere in grado di evitare il conflitto in primo luogo.

considerare facendo un

git rebase master topic 

prima di eseguire l'unione. La sezione DESCTIPTION di questa pagina http://git-scm.com/docs/git-rebase dovrebbe essere utile. Ciò può anche ovviare alla necessità che lo squash, come una base interattiva, ti permetta di schiacciare i commit di tua scelta.

EDIT: vedi anche: In git, what is the difference between merge --squash and rebase?

+0

A quel punto non avresti assolutamente bisogno di unire lo squash: sarebbe un avanzamento rapido. – Cascabel

1

Nulla è davvero perso con git. L'elenco dei commit sul ramo funzione può essere ottenuto utilizzando:

git cherry feature-branch 

Poi semplicemente pipe questo per git cat-file:

git cherry feature-branch | cut -f2 -d' ' | git cat-file --batch 

è necessario pulire-up l'uscita però. Non conosco un modo per automatizzarlo meglio.

7

Sì, è possibile ottenere la zucca messaggio di commit indietro. È memorizzato in .git/SQUASH_MSG.

Potete usarlo come un modello con il seguente comando:

git commit -t .git/SQUASH_MSG 
+2

Per qualche motivo questo non ha funzionato direttamente con me, ma grazie per il puntatore a '.git/SQUASH_MSG' :) –

+0

Ho eseguito il comando' git commit --file .git/SQUASH_MSG' e ha creato l'elenco dei messaggi di commit tutto si impegna all'interno del commit schiacciato. – Abdull