Потеря несохраненных изменений в исходной ветке при проверке новой ветки и последующем запуске "git reset --hard" - PullRequest
0 голосов
/ 16 апреля 2020

Недавно возникла проблема с потерей множества несохраненных изменений кода на общей машине, и я пытаюсь точно понять, что пошло не так, потому что это заставило меня осознать, что в * 1019 все еще есть некоторые вещи * Я не до конца понимаю , Произошло следующее:

1) В Dev1 есть куча неустановленных изменений в основной ветке

2) Dev2 входит в систему и хочет протестировать объединение другой ветви функций с master. Он запускает git branch и видит, что он уже в основной ветке. Запускает git checkout -b test && git fetch origin && git merge origin/feature и создает приложение. Закончив тестирование, он затем откатывает объединение в тестовой ветке, используя git reset --hard HEAD~1, прежде чем переключать обратно мастер, используя git checkout master.

3) Dev1 снова входит в систему и обнаруживает, что он потерял все свои неустановленные изменения в локальной ветке master

Я понимаю, что это как-то связано с запуском git reset --hard HEAD~1 в тестовой ветке, но Я не могу понять, почему git никогда не вызывал ошибку перезаписи локальных файлов в любой момент.

Может кто-нибудь сломать это для меня?

Редактировать: для тех, кого раздражает Представьте, что кто-то будет использовать git, не понимая этого, не волнуйтесь - ни один из них не я. Я только что засвидетельствовал последствия, и мне было интересно узнать, как это произошло.

1 Ответ

3 голосов
/ 16 апреля 2020

1) Dev1 имеет множество неустановленных изменений в основной ветке

Нет. Неустановленные изменения отсутствуют ни в одной ветке. Они находятся в рабочем дереве.

2) Dev2 ... запускает git checkout -b test

И это было разрешено, потому что неустановленные изменения в рабочем дереве не будет перезаписано на кассе филиала. Они все еще находятся в рабочем дереве.

затем откатывает объединение в тестовой ветви, используя git reset --hard HEAD ~ 1

Тем самым заменяя рабочее дерево, в полном объеме, с точным содержанием HEAD~1. Неустановленные изменения теперь пропали.

3) Dev1 снова входит в систему и обнаруживает, что он потерял все свои не ступенчатые изменения в локальной ветке master

Поскольку они никогда не были в мастер ветке. Они были без обработки . Они были в рабочем дереве, и это то, что заменили.

Если звучит так, как будто я думаю, что вы не знаете, что означает «неустановленный», вы правы. Вам нужно узнать о самом базовом c факте git, Трех Местах: репо, сценарий / индекс и рабочее дерево. Когда вы это сделаете, вы прекрасно поймете, потому что ваша интуиция будет исправлена.

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