Могу ли я заставить git застревать, даже если локальных изменений нет [дублировать]

Однажды я столкнулся с той же проблемой, когда я не совсем привык к the life in the IoC world. Поле @Autowired одного из моих bean-компонентов является нулевым во время выполнения.

Основная причина заключается в том, что вместо использования автоматически созданного компонента, поддерживаемого контейнером Spring IoC (чье поле @Autowired равно indeed ] правильно введенный), я newing мой собственный экземпляр этого типа бобов и его использование. Конечно, это поле @Autowired равно нулю, потому что Spring не имеет возможности его ввести.

379
задан Paul Wagland 20 April 2011 в 22:43
поделиться

5 ответов

Вам не нужно удалять stash, созданный с помощью git stash create. Из документов:

Создайте запись stash (которая является обычным объектом фиксации) и верните ее имя объекта, не сохраняя его нигде в пространстве имен ref. Это предназначено для использования в скриптах. Это, вероятно, не та команда, которую вы хотите использовать; см. «save» выше.

Поскольку ничто не ссылается на фиксацию stash, оно в конечном итоге получит мусор.


Стойка, созданная с помощью git stash или git stash save сохраняется на refs/stash и может быть удалена с помощью git stash drop. Как и во всех объектах Git, фактическое содержимое прошивки не удаляется с вашего компьютера до тех пор, пока gc не выровнят эти объекты после истечения срока их действия (по умолчанию 2 недели назад).

Старые штампы сохраняются в refs/stash reflog (попробуйте cat .git/logs/refs/stash) и может быть удален с помощью git stash drop stash@{n}, где n - номер, показанный git stash list.

187
ответ дан dahlbyk 22 August 2018 в 13:06
поделиться
  • 1
    Это не отвечает на титульный вопрос. В результате такие люди, как я, которые приходят к вопросу через Google, ища ответ на титульный вопрос и не особенно заботятся о реальных деталях, проголосуйте за человека, который на самом деле ответил на него. Некоторые люди также злобно голосуют за принятый ответ, потому что это им не помогает. Я лично просто поддержал ответ, который помог мне. – ArtOfWarfare 17 September 2013 в 16:33
  • 2
    Итак: 1) Google & quot; git delete stash & quot; 2) нажмите ссылку «СО» на основе первой половины вопроса. 3) нажмите верхний правый ответ, относящийся ко второй половине названия. Это новый. – dahlbyk 18 September 2013 в 04:19
  • 3
    @ArtOfWarfare Это будет недостатком понимания чтения, потому что это очень отчетливо ответ на «титульный вопрос». – Chris Hayes 18 September 2013 в 04:24
  • 4
    Справедливо. Я создаю свои stashes, используя только git stash - я не знаю, действительно ли это отображается на git stash create или что-то еще. Гит, конечно, то, о чем я все еще узнаю (если бы это было не так, я бы не стал читать Q Q & amp; – ArtOfWarfare 18 September 2013 в 11:36
  • 5
    Я вот смотрю, как сбрасывать git stash с помощью commit-id, как сброс stash по относительному порядку (например, stash @ {3}) - это условие гонки: положение тайника может перемещаться между ними, когда оно находится, и когда время для его удаления. задание cron, которое запускается каждые 10 минут, что stash-создает работу. Если diff изменяется от последнего запуска, сохраните его в файле timestamped patch, затем он сохранит его и удалит stash из предыдущего задания cron. Если я в интерактивном режиме что-то скрываю в точный момент, когда задание cron удаляет stash @ {6} или что-то в этом роде, stash @ {6} на самом деле не может быть таковым, который он должен был сбросить. – Adrian Pronk 3 April 2016 в 10:06

git stash drop не принимает параметр - который убирает верхний stash - или ссылку на stash, которая выглядит следующим образом: stash@{n}, который n назначает кавычку, чтобы упасть. Вы не можете передать идентификатор фиксации на git stash drop.

Я не уверен, почему вам кажется, что нужно сбросить кошелек, потому что, если вы используете stash create, запись закладок не создается для вашего «stash», поэтому нет ничего, что можно было бы сбросить.

727
ответ дан CB Bailey 22 August 2018 в 13:06
поделиться
  • 1
    Посмотрите на страницу man для git stash. stash create не создает запись, а только объект фиксации для кошелька, поэтому в журнале регистрации нет записи. – CB Bailey 21 April 2011 в 07:06
  • 2
    Из man : create Создайте stash (который является обычным объектом commit) и верните его имя объекта, не сохраняя его нигде в пространстве имен ref. – ruffin 6 June 2012 в 15:13
  • 3
    Внимание : вы, вероятно, не должны бросать несколько, как 1, 2, 3, так как на самом деле вы заканчиваете тем, что изначально были номерами 1, 3 и 5. Правильный способ сброса 1, 2 , и 3, будет делать их в порядке 3, 2, 1 или 1, 1, 1. Кроме того, он индексируется 0, причем 0 находится в верхней части стека. – ArtOfWarfare 17 September 2013 в 16:36
  • 4
    @BaltoStar git stash clear сбросит все штампы. – dahlbyk 11 September 2015 в 14:20
  • 5
    Git Extensions выдает неизвестную команду, когда «Stash Changes & quot; нажата кнопка, и все, что она делает, сохраняется после выхода и перезапуска приложения. Нет очевидного способа избавиться от кошелька с помощью графического интерфейса пользователя, но из командной строки & quot; git stash list & quot; показывает WASH-файл, и "git stash clear" избавляется от этого. – Dave 16 March 2016 в 20:27

Если вы на 100% уверены, что у вас есть только один тайник (сделайте git stash list равным 107%), вы можете сделать

git stash clear

и забыть о них (он удаляет все stashes).

Примечание: добавлен этот ответ для тех, кто оказался здесь, ищет способ очистить их всех (как и я).

153
ответ дан Felipe Pereira 22 August 2018 в 13:06
поделиться
  • 1
    Если у вас есть только один тайник, я по-прежнему рекомендую использовать git stash drop, так как это только бросает один тайник, и вам не нужно беспокоиться о потере больше, чем ожидалось. – Paul Wagland 31 August 2014 в 11:48
  • 2
    Приобретенный, поскольку он фактически отвечает на вопрос, является ли это лучшей практикой для этого. Я действительно нуждаюсь в этом, так как сегодня мне нужно, чтобы у меня застревали, которые я создал сегодня. – Alex McCabe 6 October 2014 в 12:21
  • 3
    Я давно использую тайник. Однако на этот раз я не смог избавиться от последнего тайника, который я сделал, просто используя git stash drop, как обычно. Я не уверен, что я сделал по-другому. Во всяком случае, git stash clear работал на меня. Не знал, что он существует. +1 – Konstantinos Gaitanis 23 January 2015 в 13:39
  • 4
    +1, потому что git отказывался бросать кошелек, так как один из файлов, созданных приложением, уже существовал. – Thiago Barcala 11 March 2015 в 15:41
  • 5
    в частности, 107% уверены. – levininja 10 March 2017 в 17:27

Вы должны использовать

git stash save

, а не

git stash create

, потому что это создает тайник (который является обычным объектом фиксации) и возвращает его имя объекта без сохранения это где угодно в пространстве имен ref.

Использование git stash save "some comment" используется, если у вас есть неустановленные изменения, которые вы хотите реплицировать / переместить на другую ветвь

Используйте git stash apply stash@{0} (при условии, что ваш сохраненный индекс stash равен 0), когда вы хотите, чтобы ваши сохраненные (спрятанные) изменения отражались на вашей текущей ветви

, вы всегда можете использовать git stash list, чтобы проверить все индексы stash

и использовать git stash drop stash@{0} (при условии, что ваш сохраненный индекс stash равен 0, и вы хотите удалить его), чтобы удалить конкретный штамп.

69
ответ дан ShalomSam 22 August 2018 в 13:06
поделиться
  • 1
    Просто для информации. Просто введите команду git stash по умолчанию git stash save – RBT 13 September 2017 в 12:16

Из git doc: http://git-scm.com/docs/git-stash

drop [-q | --quiet] []

Удалите из списка закладок одно спрятанное состояние. Когда нет, он удаляет последний. т.е. stash@{0}, в противном случае должна быть допустимая ссылка журнала пробелов в форме stash @ {}.

example:

git stash drop stash@{5}

Это приведет к удалению записи тайника 5. Чтобы увидеть весь список задержек:

git stash list
65
ответ дан slm 22 August 2018 в 13:06
поделиться
  • 1
    За исключением того, что я прямо говорю в нижней части вопроса, что git stash drop не делает то, что я хочу. – Paul Wagland 22 April 2015 в 18:29
  • 2
    Я бы порекомендовал проверять содержимое кошелька с помощью - git stash show stash@{REPLACE_IT_WITH_STASH_INDEX} перед выполнением git stash drop. Поверьте мне, это сэкономит массу неприятностей :) – realPK 10 October 2016 в 04:53
Другие вопросы по тегам:

Похожие вопросы: