Команда Git для сброса на предыдущий коммит без потери коммитов - PullRequest
0 голосов
/ 22 ноября 2018

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'

Есть лиупрощенный способ сделать это?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

извлечение файлов в коммите B

git checkout B -- .

вы можете увидеть изменения B и D

git diff HEAD

, затем зафиксировать его

0 голосов
/ 22 ноября 2018

Просто отмените промежуточные коммиты:

git revert D C

Возможно, вам потребуется раздавить получившиеся коммиты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...