Ответ 1
Основное отличие состоит в том, что git branch -f <branchname> <commitref>
перемещает <branchname>
для указания указанного фиксации без касания HEAD
, индекса или рабочей копии, а git checkout <branchname> && git reset --hard <commitref>
изменяет все три.
Если вы хотите быстро переставить ветки без перемещения HEAD
или изменения текущего рабочего дерева, тогда git branch -f
- хороший способ сделать это. Он также будет работать, если у вас есть незафиксированные изменения, что не всегда возможно, если вы используете git checkout
.
Еще одно отличие связано с производительностью, но оно имеет отношение только к очень крупным проектам.
В этих случаях изменение рабочего дерева с помощью git checkout
и git reset --hard
может быть дорогостоящей операцией с большим количеством дисковых операций ввода-вывода. С другой стороны, при git branch -f
на диске будет записан только один файл, т.е. Тот, который содержит <commithash>
, на который ссылается <branchname>
.