Mi piace la risposta di Luke, fatta eccezione per la limitazione che è necessario specificare manualmente il commit di base o utilizzare un flusso di lavoro in stile rebase, in cui la cronologia è linearizzata. Propongo una modifica che non richiede un argomento aggiuntivo e non modifica la topologia del grafico di commit. Come un comando di shell:
git rebase --whitespace=fix --onto $(git merge-base HEAD @{u})
O come un alias ~/.gitconfig:
ws = "!git rebase --whitespace=fix --onto $(git merge-base HEAD @{u})"
Preferisco questo perché a volte voglio rebase miei cambiamenti, ma se penso che ci potrebbe essere una fusione conflitto preferisco unirmi, in modo che sia la mia modifica originale sia la risoluzione del conflitto vengano registrate nella cronologia. In questo modo potrò in seguito secondo-indovinare la risoluzione del conflitto e rifarla se necessario.
Dato che non sempre rebase, preferisco non mescolare il whitespace-fixing con rebasing; da qui questa modifica alla risposta di Luca.
Inoltre, abilita la predefinita pre-commit hook, che interrompe in caso di errori spazi bianchi:
cp .git/hooks/pre-commit.sample .git/hooks/pre-commit
Questo dà il seguente flusso di lavoro, che mi piace perché è abbastanza manuale che io so cosa sta succedendo, ma automatizzato abbastanza di non mettersi in cammino:
- hack hack, introdurre errori spazi
- tentativo di commettere
- commit fallisce con w Errore di hitespace a causa di pre-commit hook
git commit --no-verify
a commettere ogni caso
git ws
utilizzare l'alias per risolvere
Nota sull'uso di --onto
: Non è necessario qui, ma trovo più facile ragionare su come funziona il rebase in questo modo. Nella versione di Luke, HEAD~3
è il <upstream>
nella pagina man, mentre nella mia versione <upstream>
mantiene il suo valore predefinito del vero upstream del ramo. Comunque, si finisce sempre con lo stesso risultato.
Vuoi dire "git add -Ae' non aggiunge nuovi file"? Oppure: "i file vengono aggiunti, ma non riparati"? – VonC
@VonC Non funziona su file non tracciati o nuovi (aggiunti per la prima volta ma non ancora impegnati). Per me mostra 'fatale: Empty patch. Aborted. Sto usando git versione 1.8.3.msysgit.0. – loop
@test: se avessi lasciato un commento sulla mia risposta originale, o chiedendo come far funzionare il mio comando, o collegandolo alla tua domanda, avrei ricevuto una notifica e avrei potuto parlarti di 'add -N'. Ma, SO è stato abbastanza intelligente da mettere la tua domanda nella sezione "Related" così l'ho vista quando ho modificato la mia risposta oggi. – ntc2