2015-07-09 17 views
5

Il Pro Git book consigliati vivamente di seguire questa regola:Come applicare la regola Git "Non rebase ai commit pubblicati"?

Non REBASE commit che esistono al di fuori del repository.

C'è un modo semplice per garantire che non violerete la regola? Ad esempio un set di comandi Git?

Voglio dire nel caso in cui non sei sicuro di aver pubblicato tutto o parte dei tuoi recenti commit o meno (forse sei coinvolto in diversi progetti che usano Git, e sei appena tornato a uno dei tuoi progetti).

O forse questa domanda non ha senso? Non sono un esperto di Git.

+0

bene, quando si riscrive e si riscrivono già i commit spinti, si dovrà usare il flag '--force' quando si preme, altrimenti si ottiene un errore. O intendi far rispettare questo serveride? – mb21

+0

[capitolo 8.3 del libro Pro Git] (http://www.git-scm.com/book/en/v2/Customizing-Git-Git-Hooks) dice: "L'hook pre-rebase viene eseguito prima di rebase nulla e può fermare il processo uscendo dal nulla 0. Puoi usare questo hook per disabilitare il ribasamento di qualsiasi commit che è già stato premuto. L'hook di pre-rebase di esempio che installa Git fa questo, sebbene faccia supposizioni che potrebbero non corrispondere al tuo il flusso di lavoro." –

+0

Non intendo imporre questo serveride. Grazie. – Bludzee

risposta

2

È possibile ottenere un elenco di commit "non urgenti" nel proprio repository locale confrontando il ramo corrente con il ramo upstream. Ad esempio,

Questo ci dice che abbiamo un commit che non abbiamo spinto a monte. Noi possiamo usare git log a un elenco di questi commit:

$ git log --oneline origin/master..master 
bc9dacf added another file 

Quindi non v'è un elenco di commit inediti che potremmo REBASE volenti o nolenti senza impattare eventuali collaboratori. Finché limiti lo a questi sei in buona forma.

Naturalmente, parte della domanda riguardava l'automazione di questo comportamento. C'è un hook pre-rebase che viene chiamato prima di un'operazione di rebase che potrebbe essere usato per far rispettare questo, ma penso che lascerò questo come esercizio al lettore. Non sono convinto che questo sia un grosso problema nella pratica.

Se il progetto upstream con cui si sta collaborando ha un flusso di lavoro basato su GitHub tirare le richieste, o Gerrit, o qualcosa di simile, hai un sacco meno di cui preoccuparsi: perché non si è mai spingendo al l'condiviso repository, le tue modifiche verranno semplicemente rifiutate se hai gestito per rebase il tuo repository locale in un modo non compatibile con lo con lo stato del codice upstream.

Problemi correlati