2016-04-12 2 views
2

Я хочу сохранить один файл. Поскольку git stash не разрешает имя файла в качестве параметра, я должен использовать git stash -p и выбирать файл среди остальных изменений.Можете ли вы установить порядок отображения файлов в командах «git»?

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

Однако, если есть много файлов, и тот, который я хочу занести, находится в конце списка, я должен пройти все остальные, пока не дойду до нужного. И это немного утомительно.

Так что мне было интересно: существует ли способ определить порядок, в котором файлы, не поставленные для фиксации, появляются при выполнении git stash -p?

+1

Зачем вам это нужно? Может ли [это] (http://stackoverflow.com/questions/3040833/stash-only-one-file-out-of-multiple-files-that-have-changed-with-git) работать на вас? – Francesco

+0

Стоит подумать, что 'git stash' просто создает commit-well, точнее, по крайней мере два, иногда три, коммиты, которые не находятся в вашей текущей ветви (и фактически не на * любой * ветви). Поскольку ярлыки отраслевых элементов являются подвижными, вы можете создавать коммиты, а затем перемещать метки вокруг и делать их похожими на то, что вы создали коммиты на какой-либо другой ветви. Инструменты для создания коммитов * do * позволяют указывать определенные файлы, поэтому вы можете захотеть их использовать здесь. – torek

+0

@torek хороший подсказка! Жаль, однако, что 'git stash' не позволяет в качестве опции что-то простое, как имя файла:) – fedorqui

ответ

1

Вы можете сделать это:

git add file 
git stash -k -u 
git stash 
git stash pop [email protected]\{1\} 
git checkout file 

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

Во-первых, мы добавим file к индексу, то копить все остальное (-k держать file в индексе и -u также принимать неотслеживаемые файлы), то копить file. Последние две команды - это очистка: мы применяем первый тайник для извлечения всего, затем checkoutfile, чтобы удалить его изменения (как stash). В конце концов, вы должны иметь свой stash с вашими изменениями только на file, а ваш каталог не изменится, за исключением file, который возвращается к ревизии HEAD.

+1

Интересное обходное решение, спасибо! Это немного опасно, так как он опустошает кошелек, как вы упоминаете. Обратите внимание, что, кстати, нет необходимости скрывать фигурные скобки в 'stash @ {1}'. – fedorqui

+1

@fedorqui Это не должно испортить ваш кошелек, но он сбрасывает любые 'git add', которые вы делали до этого. Ты прав насчет побега, я думаю, я позволил автозавершению на zsh убедить меня, что это необходимо. :-) –

Смежные вопросы