для одного файла вместо жонглирования командами stash гораздо проще подойти для копирования одного файла, а когда вы хотите вернуть его, просто скопировать оригинал. например. cp just_my_file.txt just_my_file.txt.manualstash теперь вы можете делать все проверки и прочее, а поскольку копия является «неотслеживаемым файлом», вы можете перемещаться по веткам и фиксировать без каких-либо проблем. Когда вы находитесь на правильной ветке / коммите, где вы хотите «объединить один файл», просто сделайте это, mv just_my_file.txt.manualstash just_my_file.txtи теперь вы можете просматривать изменения и фиксировать их там, где это необходимо
Dimitry K
Ответы:
174
Я думаю, что stash -pэто, вероятно, тот выбор, который вам нужен, но на случай, если в будущем вы столкнетесь с другими, более сложными вещами, помните:
Stashна самом деле просто очень простая альтернатива только немного более сложным branchсетам. Stash очень полезен для быстрого перемещения, но вы можете выполнять более сложные задачи с помощью веток без такой большой головной боли и работы.
иди и делай, что хочешь, а потом просто rebaseи / или mergetmpbranch. Это на самом деле не что много дополнительной работы , когда вам нужно сделать более тщательное отслеживание , чем копить позволит.
Ответ на этот вопрос кажется наиболее прямо вперед для меня при принятии поправки изменения: git stash -- filename.ext, git commit --amend, git stash pop
Brandon Dewey
1
Я думаю, что это должно опираться на некоторые очень новые функциональные возможности. Это не работает в GIT 2.1.4.
Ричард Смит
Это приводит к некоторому странному поведению для меня - сохранение тайника, но те же файлы, добавленные к постановке в одно и то же время (git v2.20.1),
paradroid
58
Вы можете интерактивно хранить отдельные строки с git stash -p(аналогично git add -p).
Это не требует имени файла, но вы можете просто пропустить другие файлы, dпока не дойдете до файла, который хотите спрятать, и спрятать все изменения там a.
Это занимает много времени, если у вас много файлов, которые вы не хотите хранить.
jjj
23
я не знаю , когда это изменилось , но по состоянию git 2.14.1вы можете указать имя файлаgit stash -p <filename>
мюон
21
Наилучший вариант - git stash save --keep-indexпоместить все, кроме этого файла, и указать stash, чтобы он сохранял индекс , таким образом сохраняя ваш неподготовленный файл:
Как указывает Дэн, thefiletostashэто единственная папка, которая сбрасывается с помощью тайника, но она также хранит другие файлы, так что это не совсем то, что вы хотите.
Несмотря на то, что это сохраняет индекс в том же состоянии, разве это также не хранит файлы, которые находятся в индексе? Другими словами, если после этого вы фиксируете индекс в текущей ветви, затем переключаетесь на другую ветку и делаете git stash pop, не будет ли она применять все файлы, а не только один файл, который мы хотели сохранить?
Дэн Молдинг
@DanMoulding: вы абсолютно правы, я не думал об этом.
CharlesB
16
На тот случай, если вы на самом деле имеете в виду «отменить изменения» всякий раз, когда вы используете «git stash» (и на самом деле не используете git stash для его временного хранения), в этом случае вы можете использовать
git checkout -- <file>
Обратите внимание, что git stash - это просто более быстрая и простая альтернатива ветвлению и тому подобному.
Я думаю, что это лучший ответ, если вы хотите удалить все ваши измененные изменения в один файл.
Мохамед Хейзел
и я бы сказал, что это лучший ответ для этой конкретной задачи
Закир Хуссейн
6
Вопрос был достаточно ясен и не спрашивал, как отменить изменения в одном файле. Downvoted.
Ричард Смит
@MukulJain Мне действительно нужно было использовать stash-per-file очень временным образом (в основном, разделяя некоторые изменения в двух коммитах, которые затрагивали одни и те же строки, для одного файла). Я не буду на самом деле отрицать, просто заявить, что это бесполезно для меня.
cp just_my_file.txt just_my_file.txt.manualstash
теперь вы можете делать все проверки и прочее, а поскольку копия является «неотслеживаемым файлом», вы можете перемещаться по веткам и фиксировать без каких-либо проблем. Когда вы находитесь на правильной ветке / коммите, где вы хотите «объединить один файл», просто сделайте это,mv just_my_file.txt.manualstash just_my_file.txt
и теперь вы можете просматривать изменения и фиксировать их там, где это необходимоОтветы:
Я думаю, что
stash -p
это, вероятно, тот выбор, который вам нужен, но на случай, если в будущем вы столкнетесь с другими, более сложными вещами, помните:Stash
на самом деле просто очень простая альтернатива только немного более сложнымbranch
сетам. Stash очень полезен для быстрого перемещения, но вы можете выполнять более сложные задачи с помощью веток без такой большой головной боли и работы.иди и делай, что хочешь, а потом просто
rebase
и / илиmerge
tmpbranch. Это на самом деле не что много дополнительной работы , когда вам нужно сделать более тщательное отслеживание , чем копить позволит.источник
Если вы не хотите указывать сообщение с вашими скрытыми изменениями, передайте имя файла после двойной тире.
Если это неотслеживаемый / новый файл, вам придется сначала его поместить.
Тем не менее, если вы действительно хотите , чтобы указать сообщение, использование
push
.Оба метода работают в git версии 2.13+
источник
git stash -- filename.ext
,git commit --amend
,git stash pop
Вы можете интерактивно хранить отдельные строки с
git stash -p
(аналогичноgit add -p
).Это не требует имени файла, но вы можете просто пропустить другие файлы, dпока не дойдете до файла, который хотите спрятать, и спрятать все изменения там a.
источник
git 2.14.1
вы можете указать имя файлаgit stash -p <filename>
Наилучший вариант -
git stash save --keep-index
поместить все, кроме этого файла, и указать stash, чтобы он сохранял индекс , таким образом сохраняя ваш неподготовленный файл:Как указывает Дэн,
thefiletostash
это единственная папка, которая сбрасывается с помощью тайника, но она также хранит другие файлы, так что это не совсем то, что вы хотите.источник
git stash pop
, не будет ли она применять все файлы, а не только один файл, который мы хотели сохранить?На тот случай, если вы на самом деле имеете в виду «отменить изменения» всякий раз, когда вы используете «git stash» (и на самом деле не используете git stash для его временного хранения), в этом случае вы можете использовать
Обратите внимание, что git stash - это просто более быстрая и простая альтернатива ветвлению и тому подобному.
источник