Потому что области постановки, это не так просто, как svn revert
. В зависимости от того, что вы сделали, и чем вы являетесь, вам нужно использовать либо git checkout
, либо git reset
. Вы должны быть осторожны с git reset
, хотя, поскольку вы можете переписать историю и потерять работу.
Допустим, у вас есть совершить график:
A <-- B <-- C <-- D
И вы в настоящее время D
с некоторыми изменениями. Чтобы просто отказаться от всех изменений (поэтапно или нет), вы можете использовать git reset --hard HEAD
или git reset --hard D
. Оба сбросят состояние вашей рабочей копии.
Если вы хотите, чтобы состояние вашей рабочей копии, идентично A
, но не потерять фиксации B
и C
, то вы должны использовать: git checkout A -- .
из верхней части рабочей копии. Это установит состояние вашей рабочей копии на содержимое A
. На этом этапе ваше рабочее дерево загрязнено, поэтому вам нужно зафиксировать тот факт, что вы хотели вернуться. Совершить график в этой точке будет:
A <-- B <-- C <-- D <-- A'
Где A'
новое обязательство (с другим идентификатором), который приносит свою работу обратно в эквивалент фиксации A
.
Если вы хотите потерять фиксацию B
и C
, вы можете использовать git reset --hard A
. Это вернет указатель ветки назад, чтобы зафиксировать A
. Теперь вы переписываете историю, поэтому будьте осторожны. Если вы работаете с другими членами команды в этом филиале, вы не хотите этого делать. Если это ваша собственная ветка, вам, вероятно, нужно будет использовать git push -f
, где -f
означает --force
, при нажатии на свое дистанционное репо.Вы также должны убедиться, что вы установили push.default
либо current
, либо upstream
, чтобы избежать нажатия всех соответствующих ветвей и случайно перемотать чью-то работу.
FWIW, я написал blog post about reverting changes in Git несколько лет назад. Это по-прежнему актуально и сегодня. Вы можете найти это полезным.
Большое вам спасибо. – Richard77
Добро пожаловать! – jszakmeister