Nei miei esperimenti non sono stato in grado di trovare alcuna differenza funzionale traQual è la differenza tra git resettare --hard e git resettare --merge
git reset --hard
e
git reset --merge
L'utilizzo le istruzioni non danno alcun accenno né
--hard reset HEAD, index and working tree
--merge reset HEAD, index and working tree
io uso regolarmente l'opzione --hard
così understan come funziona Qual è la differenza tra le opzioni --merge
e --hard
?
Cheers, Olly
Forse un esempio potrebbe aiutare qui, usiamo la seguente sequenza:
cd git_repo
touch file_one
git add file_one
git commit -m "commit one" # sha1 of 123abc
echo "one" >> ./file_one
git commit -a -m "commit two" # sha1 of 234bcd
echo "two" >> ./file_one
git add . # populate index with a change
echo "three" >> ./file_one # populate working area with a change
Ora, se provo
git reset --merge 123abc
ottengo
error: Entry 'file_one' not uptodate. Cannot merge.
fatal: Could not reset index file to revision '123abc'
il motivo è che file_one ha cambiamenti sia nella zona di lavoro e l'indice
Per rimediare a questo faccio
git add .
git reset --merge 123abc
Questa volta funziona, però, ottengo lo stesso risultato di git reset --hard
. L'indice è vuoto, l'area di lavoro è vuota, file_one è vuoto, come avveniva dopo il primo commit.
Qualcuno può venire con i passaggi che illustrano la differenza?
Ho letto quei documenti, ma devo dire che non posso dare molto senso a loro. "Reimposta l'indice in modo che corrisponda all'albero registrato dal commit denominato" La mia comprensione è che l'indice è vuoto dopo l'operazione reset --merge, questo commento sembra indicare qualcos'altro. "e aggiorna i file diversi tra il commit specificato e il commit corrente nell'albero di lavoro" dove vengono effettuati gli aggiornamenti a questi file, non vengono visualizzati nell'indice, vengono commessi automaticamente? – opsb
Dopo 'git reset --merge' hai indice == , ma aggiorna solo quei file in lavorazione che sono diversi tra HEAD (commit corrente) e (named commit), preservando (alcune delle) modifiche locali . –
Nell'esempio che ho sopra ho scoperto che non potevo eseguire un reset git --merge quando avevo delle modifiche nell'area di lavoro. E 'possibile, infatti, utilizzare diversi passaggi da quelli che ho mostrato sopra? – opsb