Как отменить изменения в git? - PullRequest
0 голосов
/ 26 мая 2019

Я работал над основной веткой, когда заметил, что изменения были слишком большими, и решил, что я должен сделать их в другой ветке. Поэтому я сделал git checkout -b new_branch_name в Git Bash, а затем (без фиксации в любой из обеих веток) я отменил все изменения в основной ветке (из Github Desktop). К моему удивлению, это также отменило изменения новой ветви, я думал, что они не были связаны.

Как мне отменить сброс?

EDIT:

  • Изменения: вещи, которые я не совершал.
  • Отмена: Github Desktop позволяет мне отменить (удалить) изменения, которые не были зафиксированы.

Извините за плохую терминологию, я новичок в git.

1 Ответ

1 голос
/ 26 мая 2019

tl; dr: в случае сомнений: git stash.

Я не уверен, что вы называете discard , поскольку это не входит в терминологию git.Кроме того, я не уверен, что вы подразумеваете под изменениями .

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

Что вы были в ветви A:

unstaged changes
      ↑
      A
      ↑
      …

и что вы создали новую ветку B

unstaged changes
       ↑
     A,B
       ↑
       …

и тогда вы сделали то, что вы называете сбросом , но что на самом деле является reset --hard текущей ветки.

     A,B
       ↑
       …

Если это так, то яМне очень жаль сообщать вам, что ваши изменения потеряны.

Навсегда исчезнувший.

И вам следует поторопиться переписать их, пока они еще свежи в вашем уме.

Вам нужно понять, чтокогда вы манипулируете git, вы обрабатываете следующие уровни изменений:

  1. Ваше рабочее пространство: все внесенные вами изменения выглядят как unstaged
  2. Yourindex: все изменения, которые вы добавили для следующего коммита
  3. Ваша текущая ветвь: все, что вы зафиксировали
  4. Удаленные ветки: что бы вы ни нажали

как правило, если он не находится в коммите (то есть 1. или 2.), то он может исчезнуть.В противном случае есть решения для исправления ситуации.

Но иногда вы хотите защитить свой грязный индекс, не делая новые коммиты.Это то, для чего stash.Поэтому каждый раз, когда вы захотите поиграть с ветками, вы можете git stash, и ваша работа будет сохранена, ваше рабочее пространство и индекс будут чистыми.Как только вы закончите, вы можете git stash pop и вы снова найдете свои изменения.

Из того, что вы говорите, есть неверное понимание этой последней части: локальные изменения и изменения в индексе не относятся кветвь, это относительно вашей файловой системы.Если вы измените ветку, они останутся там и будут применены к новой ветке (если это возможно, иначе вы получите ошибку).

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