In meinen Experimenten jeden funktionellen Unterschied zwischenWas ist der Unterschied zwischen Git zurückgesetzt --hard und git reset --merge
git reset --hard
und
git reset --merge
Die Verwendung Ich war nicht in der Lage zu finden Anweisungen geben keinen Hinweis entweder
--hard reset HEAD, index and working tree
--merge reset HEAD, index and working tree
ich die --hard
Option so under regelmäßig nutzen Wie das funktioniert. Was ist der Unterschied zwischen den Optionen --merge
und --hard
?
Cheers, Olly
Vielleicht ein Beispiel würde hier helfen, lassen Sie uns die folgende Sequenz verwenden:
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
Nun, wenn ich
git reset --merge 123abc
versuche ich bekommen
error: Entry 'file_one' not uptodate. Cannot merge.
fatal: Could not reset index file to revision '123abc'
der Grund, dass file_one zu sein hat Änderungen sowohl in den Arbeitsbereich und dem Index
Um dies zu beheben, ich
git add .
git reset --merge 123abc
Diesmal ist es funktioniert, aber ich das gleiche Ergebnis wie git reset --hard
erhalten. Der Index ist leer, der Arbeitsbereich ist leer, file_one ist leer, wie nach dem ersten Commit.
Kann jemand mit den Schritten kommen, die den Unterschied veranschaulichen?
Ich habe diese Dokumente gelesen, aber muss sagen, dass ich nicht viel Sinn von ihnen machen kann. "Setzt den Index so zurück, dass er mit dem vom benannten Commit aufgezeichneten Baum übereinstimmt" Meines Wissens ist der Index nach dem Reset --merge-Vorgang leer, dieser Kommentar scheint etwas anderes anzuzeigen. "und aktualisiert die Dateien, die sich im benannten Commit und dem aktuellen Commit im Arbeitsbaum unterscheiden" Wo werden die Aktualisierungen an diesen Dateien vorgenommen, sie erscheinen nicht im Index, werden sie automatisch übernommen? – opsb
Nach 'git reset --merge' haben Sie index == , aber es aktualisiert nur die Dateien in der Arbeit sind, die sich zwischen HEAD (current commit) und (named commit) unterscheiden und einige Ihrer lokalen Änderungen beibehalten . –
In dem obigen Beispiel habe ich festgestellt, dass ich keine Git reset --merge durchführen konnte, wenn ich Änderungen im Arbeitsbereich hatte. Ist das tatsächlich möglich, indem ich andere Schritte als die oben gezeigten verwende? – opsb