Я работал над основной веткой, когда заметил, что изменения слишком велики, и решил, что должен внести их в другую ветку. Так что я сделал git checkout -b new_branch_name
на Git Bash, а затем (без фиксации ни в одной из обеих веток) я отменил все изменения в основной ветке (из Github Desktop). К моему удивлению, это также отбросило изменения новой ветки, я думал, что они не связаны.
Как я могу отменить сброс?
Обновлено:
Извините за мою плохую терминологию, я новичок в git.
tl;dr: when in doubt :
git stash
.
Я не уверен, что вы называете отказаться, так как это не входит в терминологию git. Кроме того, я не уверен, что вы подразумеваете под изменения.
Итак, я предполагаю, что под изменениями вы подразумеваете то, что вы сделали, но не зафиксировали, то есть, что у вас было свое рабочее пространство или индекс грязный.
Что вы были на ветке A
:
unstaged changes
↑
A
↑
…
и что вы создали новую ветку B
unstaged changes
↑
A,B
↑
…
и что тогда вы сделали то, что вы называете отказаться, но что на самом деле является reset --hard
текущей ветки.
A,B
↑
…
Если это так, то мне очень жаль сообщать вам, что ваши изменения потеряны.
Навсегда ушел.
И вам следует поторопиться с их переписыванием, пока они еще свежи в вашей памяти.
Что вам нужно понять, так это то, что когда вы манипулируете git, вы обрабатываете следующие уровни изменений:
как правило, если его нет в коммите (т.е. 1 или 2), то он может исчезнуть. В противном случае есть решения, чтобы исправить ситуацию.
Но иногда вы хотите защитить свой грязный индекс, не делая новых коммитов. Это то, для чего нужен stash
. Так что каждый раз, когда вы хотите поиграть с ветками, вы можете git stash
и ваша работа будет сохранена, ваше рабочее пространство и индекс будут чистыми. Как только вы закончите, вы можете git stash pop
, и вы снова найдете свои изменения.
Из того, что вы говорите, в этой последней части есть недоразумение: локальные изменения и изменения в индексе не относятся к ветке, они относятся к вашей файловой системе. Если вы измените ветку, они останутся там и будут применены к новой ветке (если возможно, иначе вы получите ошибку).
Короче говоря: изменения, которые были в вашем рабочем дереве, когда вы работали над исходной веткой, когда вы извлекали другую ветку, git переносил их вместе при проверке... но они по-прежнему будут незавершенный, как и раньше. переключение веток. Если вы потом убрали, ну .... они ушли.
Если они не зафиксированы, изменения не являются частью какой-либо ветки. Это просто локальные правки файлов.