Case:
История коммитов:
A -> B -> C -> D
Я надеюсь сбросить текущий рабочий каталог на B в текущей ветке с историей:
A -> B -> C -> D -> E
Результат дерева тот же, что и B
, что означает, что
git diff B..E --name-only
должен возвращать пустой список.
Глупый путь:
# we assume current work directory is `tree`, and branch is `master`
# and work directory HEAD at `D`
# reset HEAD to D
cd tree
git checkout -f D
# create a copy work directory
cd ..
rm -rf copy
cp -r tree copy
# clean old work directory
rm -rf tree
mkdir tree
cp -r copy/.git tree/.git
# reset copy directory to revision `B`
cd copy
git checkout -f B
# copy tree from copy directory to tree
rm -rf .git
cp -r ./.* ./* ../tree
# commit changes, current revision is we wanted `E`
git add .
git ci -m 'revert to commit B'
Есть лиупрощенный способ сделать это?