tl; dr: в случае сомнений: git stash
.
Я не уверен, что вы называете discard , поскольку это не входит в терминологию git.Кроме того, я не уверен, что вы подразумеваете под изменениями .
Так что я буду предполагать, что под изменениями вы имеете в виду то, что вы сделали, но не выполнили, то есть что у вас естьрабочая область или индекс загрязнен .
Что вы были в ветви A
:
unstaged changes
↑
A
↑
…
и что вы создали новую ветку B
unstaged changes
↑
A,B
↑
…
и тогда вы сделали то, что вы называете сбросом , но что на самом деле является reset --hard
текущей ветки.
A,B
↑
…
Если это так, то яМне очень жаль сообщать вам, что ваши изменения потеряны.
Навсегда исчезнувший.
И вам следует поторопиться переписать их, пока они еще свежи в вашем уме.
Вам нужно понять, чтокогда вы манипулируете git, вы обрабатываете следующие уровни изменений:
- Ваше рабочее пространство: все внесенные вами изменения выглядят как unstaged
- Yourindex: все изменения, которые вы добавили для следующего коммита
- Ваша текущая ветвь: все, что вы зафиксировали
- Удаленные ветки: что бы вы ни нажали
как правило, если он не находится в коммите (то есть 1. или 2.), то он может исчезнуть.В противном случае есть решения для исправления ситуации.
Но иногда вы хотите защитить свой грязный индекс, не делая новые коммиты.Это то, для чего stash
.Поэтому каждый раз, когда вы захотите поиграть с ветками, вы можете git stash
, и ваша работа будет сохранена, ваше рабочее пространство и индекс будут чистыми.Как только вы закончите, вы можете git stash pop
и вы снова найдете свои изменения.
Из того, что вы говорите, есть неверное понимание этой последней части: локальные изменения и изменения в индексе не относятся кветвь, это относительно вашей файловой системы.Если вы измените ветку, они останутся там и будут применены к новой ветке (если это возможно, иначе вы получите ошибку).