2009-05-06 3 views
8

Ho bisogno di inserire un commit nel ramo master del mio repository git preservando le successive fusioni e commit.Come inserisco un commit usando git?

Al momento ho qualcosa di simile

A--B--C--D--E--F  master 
     \  \ 
     G--H I--J branches 

e necessità di inserire un commit K tale che la nuova struttura diventa

A--B--K    master 
    \ 
    C--D--E--F  new branch 
     \  \ 
     G--H I--J old branches 

io non sono nemmeno sicuro se questo è possibile. Qualche idea?

risposta

10
git checkout master 
git branch new_branch # copy current branch master to new_branch 
git reset --hard B # now master points to B 
(hack, hack, hack) 
git commit -m K  # K on B in master 
+1

Ciò comporta la struttura richiesta - grazie! –

2

Rinomina il ramo "master" in "nuovo ramo". Quindi controlla il commit B, inizia un nuovo ramo chiamato "master" da lì e apporta le tue modifiche. Qualcosa come segue dovrebbe farlo (non testato).

git branch -m master new_branch 
git branch master B 
git checkout master 
+0

Grazie per la risposta. Ciò comporta che il commit A è un membro di "nuovo ramo" e non "maestro". La cronologia per il master diventa quindi "B - K" anziché "A - B - K". Questa stessa struttura potrebbe essere raggiunta (con diversi nomi di filiali) semplicemente ramificando da B e commettendo K. –

+0

@Jason So che sono in ritardo di 4 anni per la festa qui, e il tuo account sembra essere sparito; ma il commit A sarebbe un membro sia di "new_branch" che di "master". È un albero e molti rami possono condividere gli stessi antenati. Naturalmente, potrebbe essere annotato in un modo o nell'altro (ad esempio da 'git log --graph --oneline --all'), ma questa è solo una notazione -' git log master' e 'git log new_branch' mostrerà sia avere A. È anche vero del tuo suggerimento per creare questa stessa struttura. – 13ren

0
# git checkout -b new-master B 

Ora apportato le modifiche per K, impegnarli e voilà, c'è la struttura che si desidera. :)