Почему git stash не уникален для каждой ветви? - PullRequest
76 голосов
/ 18 сентября 2008

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

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

Ответы [ 4 ]

69 голосов
/ 18 сентября 2008

Как уже упоминалось, если вы хотите «тайник для каждой ветви», вы действительно хотите, чтобы новая ветвь отделялась от существующей ветви.

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

F.ex., Работая над веткой функций, я часто замечаю незначительные ошибки или косметические примеси в коде, которые не имеют отношения к этой ветке. Ну, я просто исправлю это сразу. Когда приходит время коммитить, я выборочно фиксирую соответствующие изменения, но не исправления и косметику. Вместо этого я прячу их, что позволяет мне переключиться на мою ветку minor-fixes-on-stable, где я могу затем применить stash и зафиксировать каждое незначительное исправление отдельно. (В зависимости от рассматриваемых изменений, я также еще раз спрятал некоторые из них, чтобы переключиться на другую ветвь функций, где я применяю те .)

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

Если бы тайник не был глобальным, этот тип рабочего процесса был бы намного сложнее.

19 голосов
/ 09 июля 2012

Начиная с Git 1.6, теперь вы можете применять тайники к веткам, используя

git stash branch name_of_new_branch

Git создаст для вас новую ветку и зацените! Для получения дополнительной информации см.

Полагаю, вы можете перемещать тайники с помощью

git stash branch <branch | new_branch> [<stash>]

и чтобы увидеть список ваших тайников, используйте

git stash list

Ссылка

17 голосов
/ 18 сентября 2008

, если вы хотите, чтобы "тайник", который запускался из ветви, делал что-то подобное, чтобы сохранить ваши изменения в новой ветви вне вашей текущей ветви.

git checkout -b new_stash
git commit -a -m "stashed changes"

чтобы убрать тайник

git reset HEAD^
git branch -d new_stash

git stash особенно полезен, потому что вы можете вытянуть изменения в грязное дерево, т.е. если у вас есть выдающиеся изменения и вы хотите сделать

git pull

и вы не можете, вы можете спрятать свои изменения, вытащить и затем применить тайник

git stash
git pull
git stash apply
git stash clear

надеюсь, это помогло!

5 голосов
/ 12 февраля 2009

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

Например - я часто делаю простые изменения в ветке исправления ошибок; только чтобы обнаружить, что изменение, над которым я работаю, более сложное, чем я предполагал. Git-stash - это самый простой способ перенести этот набор изменений в другую ветку.

...