2013-02-22 3 views
10

Вопрос:
Я добавил несколько файлов в свою промежуточную область. Я хочу временно сохранить эту информацию. Как?Как сохранить текущее состояние моей промежуточной области?

фон:
Иногда я выполняю некоторые большой рефакторинг. Это действительно имеет смысл сделать полный результат.
Во время этого рефакторинга я также делаю некоторые несвязанные изменения, которые я хотел бы совершить независимо.
Например, рефакторинг переименован в метод. Не связанное изменение фиксировало орфографическую ошибку для одного параметра другого метода в том же классе.
Теперь предположим, что я уже добавил большинство файлов в промежуточную область, когда понял, что забыл заранее зафиксировать одно из несвязанных изменений.
Добавление файлов в промежуточную область требует времени, потому что я проверяю каждый файл, чтобы убедиться, что я действительно выполняю только то, что хочу. Таким образом, просто удаление их всех из промежуточной области не является решением.
Что я хотел бы сделать вместо:

  1. Сохранить текущее состояние плацдарма
  2. Удалить все файлы поставило
  3. СТАДИИ связаны изменения
  4. Зафиксируйте неродственное изменение
  5. Re- примените сохраненное состояние к промежуточной области.

Это возможно?

Альтернативным решением будет возможность нескольких областей постановки, но я не думаю, что это возможно.

+0

Существует только одна промежуточная зона. И git на самом деле не хранит его - вы могли бы сделать это сами. – Reactormonk

+0

, вы можете захотеть ['git stash'] (http://git-scm.com/docs/git-stash) и сделать некоторые интерактивные проверки/добавить затем –

+0

@NevikRehnel: Как бы git stash сохранить работу, которую я вложил существующее состояние промежуточной области? –

ответ

12

Следующая цепочка команд должна сделать трюк

git commit -m "temporary" # save current stage are as an actual commit 
git commit unrelated_files -m "The other feature" 
git stash # hide the rest 
git rebase -i HEAD~2 # change the order of two last commits 
git reset HEAD^ # rollback the "temporary" commit 
git add . # add everything from that commit back to staging 
git stash pop # and return back all initially unstaged stuff 
+0

Да, это прекрасно. Большое спасибо! :) И это отлично соответствует моему использованию git. В любом случае, я много переустанавливаю. –

2

Вам определенно нужно git stash

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

Когда вы будете готовы к работе над вашей функцией снова, повторно применить спрятанных изменения с git stash apply

Вы можете объединить несколько притонов, git stash list перечислит их, то вы можете выбрать один Wich применять, например, git stash apply @{1}

Edit:

Как @ nevik-rehnel сказал в комментариях, вы можете также использовать интерактивное добавление.

Невысокое все, используйте git add -p, чтобы выполнить несвязанные изменения, зафиксировать, а затем восстановить все.

+1

Нет, это определенно * не * что мне нужно. Я говорю о * промежуточной области *, а не о моей рабочей директории. И я тоже не хочу менять свою ветку. –

+0

Git stash сохранит вашу промежуточную область и оставьте чистый каталог, после чего вы сможете изменить свой файл, применить свою несвязанную фиксацию, прикладывать, завершить свою работу и совершить. – Intrepidd

+0

См. Этот пояс для более подробного примера: https://gist.github.com/Intrepidd/d52b7e190aec8cd29854 – Intrepidd

0

Почему вы не можете сохранить его в качестве филиала и начать новую ветку

0

В этом, казалось, работали:

  • git commit -m "temp"
  • git stash -u
  • git reset HEAD^
  • git stash save "MeepMeep!"
  • git stash pop stash @ {1}
Смежные вопросы