2015-08-31 1 views
5

У Intellij есть функция, которая очень крута в теории, называется Smart Checkout. Эта функция срабатывает, когда вы меняете филиалы, и у вас есть файлы в текущей ветке, которые вы изменили, но не сделали.Undo Intellij Smart Checkout

Вместо того, чтобы заставлять вас совершать, хранить или откладывать свои изменения, он застревает их для вас, переключает ветви, а затем запускает stash pop в новой ветке.

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

Итак, теперь моя ветка master полна изменений, которые принадлежат другой ветке, некоторые файлы сообщают о конфликтах слияния, и у меня есть все виды боли.

То, что я хочу сделать это:

  1. Чистоплотный удалить изменения из основной ветви.
  2. Верните их обратно в филиал, где я работал.

Есть ли способ сделать это?

+0

Кстати, потеря этих изменений довольно мучительна .... несколько рабочий день. Я хотел бы вернуть их. – mlissner

+2

Этот тип магии - именно то, почему я предпочитаю использовать интеграцию IDE VCS только для операций чтения и всегда добавлять, зашивать, фиксировать и т. Д. В командной строке. в любом случае вы можете восстановить спрятанные изменения (здесь есть много вопросов, связанных с SO, например http://stackoverflow.com/questions/89332/how-to-recover-a-dropped-stash-in-git), легко используя git. – ThiefMaster

+0

Использование такого инструмента, как Atlassian Sourcetree, предупредит вас о том, что ваши местные изменения будут перезаписаны кассой, что позволит избежать этой ситуации! Я думаю, что команда, подобная инструменту git, может делать то же самое, но я не уверен на 100%. – mvd

ответ

5

Вот как минимум частичный ответ, который работает, если у вас возник конфликт слияния во время stash pop. Как упоминалось в моем вопросе, stash используется функцией Smart Checkout, чтобы скрыть ваши локальные изменения, а затем применить их к новой ветке после ее извлечения.

Способ использования Intellij заключается в использовании stash в филиале, в котором вы сейчас находитесь, а затем используя stash pop в филиале, на который вы переключаетесь.

Когда изменения спрятаны, они попадают в стек сложенных изменений вверху. Затем, когда запускается stash pop, эти изменения выходят из стека и применяются.

По крайней мере, в большинстве случаев, это то, что происходит. Однако, если есть конфликт слияния, Intellij информирует вас об этом и сохраняется. Вы можете увидеть стек тайниках, запустив:

git stash list 

Если тайник вы хотите по-прежнему присутствует, что вы можете сделать, это просто проверка сук, которые первоначально были на. Сбросьте его, затем сделайте stash apply, что похоже на stash pop, но не удаляет кошелек из списка. Итак:

git checkout $original-branch 
git reset HARD 
git stash apply 

Тогда, если все хорошо, то вы можете удалить тайник с:

git stash drop 

Поскольку этот ответ довольно грубый и охватывает только одну ситуацию, я маркирование как вики сообщества , Усовершенствования очень приветствуются.