Отменить слияние с мастером, который перезаписал незафиксированные файлы в ветке - PullRequest
0 голосов
/ 11 марта 2020

У меня была основная ветка с неустановленными / незафиксированными изменениями. Это команды, которые я выполнил.

git branch dev
git checkout master
git checkout .
git pull
git checkout dev
git fetch origin
git merge origin/master

Все мои изменения исчезли из файлов в dev. Я никогда не получал предупреждение о конфликте при слиянии с мастером. Моя история коммитов на обеих ветках выглядит одинаково. Я попытался git reflog безрезультатно.

hash6 HEAD@{0}: reset: moving to HEAD@{8}
hash1 HEAD@{1}: reset: moving to HEAD@{8}
hash2 HEAD@{2}: reset: moving to HEAD@{8}
hash1 HEAD@{3}: reset: moving to HEAD@{10}
hash3 HEAD@{4}: reset: moving to HEAD@{10}
hash5 HEAD@{5}: reset: moving to HEAD@{10}
hash4 HEAD@{6}: reset: moving to HEAD@{10}
hash2 HEAD@{7}: checkout: moving from master to dev
hash2 HEAD@{8}: checkout: moving from dev to master
hash2 HEAD@{9}: merge origin/master: Fast-forward
hash1 HEAD@{10}: checkout: moving from master to dev
hash2 HEAD@{11}: commit: commit-message
hash1 HEAD@{12}: checkout: moving from dev to master
hash1 HEAD@{13}: checkout: moving from master to dev
hash1 HEAD@{14}: pull: Fast-forward
hash3 HEAD@{15}: pull: Fast-forward
hash5 HEAD@{16}: reset: moving to origin/master
hash4 HEAD@{17}: clone: from git@github.com:my/my-repo

Есть ли способ восстановить эти незафиксированные изменения? Я чувствую, что они не должны были просто исчезнуть без предупреждения, но я нигде не могу их найти.

1 Ответ

1 голос
/ 11 марта 2020

Когда вы запускаете git checkout . ваши файлы обновляются в соответствии с их индексным состоянием. Это означает, что локальные изменения потеряны. К сожалению, нет никакого способа вернуть их назад (если не попытать счастья с помощью инструментов восстановления).

git checkout . в вашем случае не потребовалось бы (слияние). Если вы выполнили эту операцию, потому что вам нужен чистый рабочий каталог, используйте git stash save + git stash pop в следующий раз.


Примечание: неизмененные изменения не фиксируются и, следовательно, они не «принадлежат» любая ветка. Это означает, что они могут легко потеряться, и нет простого способа вернуть их. Поскольку нет никакой фиксации ни на одной ветви (или на любой реф), они также не будут отображаться в reflog.

Однако , может быть крошечный шанс, что вы сможете восстановить свои содержимое файлов. Вы недавно запускали git stash перед тем, как выбросить свои локальные изменения? Или вы готовили коммит и вносили add изменения в эти файлы? Если это так, вы можете запустить git fsck, найти «висячие капли», проверить их с помощью git cat-file и сохранить их на диск. git fsck --lost-found также может быть полезным в вашем случае, см. Как восстановить файлы из отсутствующего дерева и висячих больших двоичных объектов? , Восстановление висячих больших двоичных объектов в git или Восстановление файлов после сбоя git сброс --hard команда

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