Отображаемое значение вызывается функцией g_format_size_for_display GLib. Вы должны отредактировать исходный код nautilus, чтобы изменить это поведение, просто добавив% i к выводу:
Шаг 1: Загрузите исходный код, установите зависимости и откройте файл для редактирования
mkdir -p .p/nautilus && cd .p/nautilus
sudo apt-get build-dep nautilus
apt-get source nautilus && cd nautilus*
gedit src/file-manager/fm-properties-window.c
Шаг 1 : измените код
Теперь перейдите к строке 2338 (в Nautilus 2.30) и измените with size %s на with size %s (%i Bytes). Сделайте то же самое для totalling %s. Измените его на totalling %s (%i Bytes) Теперь он должен выглядеть так:
text = g_strdup_printf (ngettext("%'d item, with size %s (%i Bytes)",
"%'d items, totalling %s (%i Bytes)",
Шаг 3: Скомпилировать
Теперь вы можете просто скомпилировать Nautilus, как и все другие приложения
./configure --prefix=/usr
make
sudo make install
nautilus -q
Обратите внимание, что Nautilus будет перезаписана всякий раз, когда будет обновлено это через управление пакетами. Это означает, что вам нужно снова создать и установить его вручную.
Существует также альтернативный способ использования сценария Nautilus, но это добавит еще одну запись в щелчок правой кнопкой мыши вместо того, чтобы иметь значение в свойствах окно.
Чтобы получить список задержек, которые все еще находятся в вашем репозитории, но недоступны:
git fsck --unreachable | grep commit | cut -d" " -f3 | xargs git log --merges --no-walk --grep=WIP
Если вы указали заголовок на свой тайник, замените " WIP "в -grep=WIP в конце команды с частью вашего сообщения, например -grep=Tesselation.
Команда grepping для «WIP», потому что сообщение фиксации по умолчанию для кошелька находится в форме WIP on mybranch: [previous-commit-hash] Message of the previous commit.
То, что я здесь искал, это то, как на самом деле вернуть кошелек, независимо от того, что я проверил. В частности, я что-то спрятал, затем проверил более старую версию, а затем вынул ее, но в тот более ранний момент тайник был не-оператором, поэтому тарелка исчезла; Я не мог просто сделать git stash, чтобы вернуть его в стек. Это сработало для меня:
$ git checkout somethingOld
$ git stash pop
...
nothing added to commit but untracked files present (use "git add" to track)
Dropped refs/stash@{0} (27f6bd8ba3c4a34f134e12fe69bf69c192f71179)
$ git checkout 27f6bd8ba3c
$ git reset HEAD^ # Make the working tree differ from the parent.
$ git stash # Put the stash back in the stack.
Saved working directory and index state WIP on (no branch): c2be516 Some message.
HEAD is now at c2be516 Some message.
$ git checkout somethingOld # Now we are back where we were.
В ретроспективе я должен был использовать git stash apply не git stash pop. Я делал bisect и имел небольшой патч, который я хотел применить на каждом шаге bisect. Теперь я делаю это:
$ git reset --hard; git bisect good; git stash apply
$ # Run tests
$ git reset --hard; git bisect bad; git stash apply
etc.
Принятый ответ Аристотеля покажет все достижимые коммиты, в том числе несташные коммиты. Чтобы отфильтровать шум:
git fsck --no-reflog | \
awk '/dangling commit/ {print $3}' | \
xargs git log --no-walk --format="%H" \
--grep="WIP on" --min-parents=3 --max-parents=3
Это будет включать в себя только коммиты, которые имеют ровно 3 родительских фиксации (которые имеет кошелек) и сообщение которых включает в себя «WIP on».
Имейте в виду, что если вы сохранили свой штамп с сообщением (например, git stash save "My newly created stash"), это переопределит сообщение по умолчанию «WIP on ...».
Вы можете отображать больше информации о каждом фиксации , например отобразить сообщение фиксации или передать его на git stash show:
git fsck --no-reflog | \
awk '/dangling commit/ {print $3}' | \
xargs git log --no-walk --format="%H" \
--grep="WIP on" --min-parents=3 --max-parents=3 | \
xargs -n1 -I '{}' bash -c "\
git log -1 --format=medium --color=always '{}'; echo; \
git stash show --color=always '{}'; echo; echo" | \
less -R
В OSX с git v2.6.4 я просто случайно запускаю git stash drop, после чего я нашел его, пробираясь ниже шагов
Если вы знаете имя кошелька, используйте:
$ git fsck --unreachable | grep commit | cut -c 20- | xargs git show | grep -B 6 -A 2 <name of the stash>
в противном случае вы найдете идентификатор из результата вручную:
$ git fsck --unreachable | grep commit | cut -c 20- | xargs git show
Тогда, когда вы найдете идентификатор commit просто ударить по git stash apply {commit-id}
Надеюсь, это поможет кому-то быстро
эквивалент Windows PowerShell с помощью gitk:
gitk --all $(git fsck --no-reflog | Select-String "(dangling commit )(.*)" | %{ $_.Line.Split(' ')[2] })
Возможно, более эффективный способ сделать это в одном канале, но это делает задание.
Если вы хотите переделать потерянный тайник, вам сначала нужно найти хэш вашего потерянного тайника.
Как Аристотель Пагалтзис предложил git fsck помочь вам.
Лично я использую свой псевдоним log-all, который показывает мне каждую фиксацию (восстанавливаемые коммиты), чтобы лучше понять ситуацию:
git log --graph --decorate --pretty=oneline --abbrev-commit --all $(git fsck --no-reflogs | grep commit | cut -d' ' -f3)
Вы можете выполнить еще более быстрый поиск, если ищете только Сообщения об ошибке «WIP on».
Как только вы узнаете свой sha1, вы просто измените свой лог-файл для добавления старого тайника:
git update-ref refs/stash ed6721d
Вероятно, вы предпочтете связать сообщение -m
git update-ref -m "$(git log -1 --pretty=format:'%s' ed6721d)" refs/stash ed6721d
И вы захотите использовать это как псевдоним:
restash = !git update-ref -m $(git log -1 --pretty=format:'%s' $1) refs/stash $1
Я только что построил команду, которая помогла мне найти мой потерянный фиксатор:
for ref in `find .git/objects | sed -e 's#.git/objects/##' | grep / | tr -d /`; do if [ `git cat-file -t $ref` = "commit" ]; then git show --summary $ref; fi; done | less
В этом списке перечислены все объекты в дереве .git / objects, найдите те, которые имеют тип commit, затем показывает резюме каждого из них. С этого момента речь шла только о том, чтобы найти соответствующие «WIP по работе: 6a9bb2» («работа» - это моя ветка, 619bb2 - недавняя фиксация).
Заметим, что если Я использую «git stash apply» вместо «git stash pop». У меня не было бы этой проблемы, и если я буду использовать «сообщение git stash save», тогда коммита, возможно, было бы легче найти.
Update : С идеей Натана это становится короче:
for ref in `git fsck --unreachable | grep commit | cut -d' ' -f3`; do git show --summary $ref; done | less
Восстановил его, выполнив следующие шаги:
Определить удаленный хэш-код: gitk --all $ (git fsck --no-reflog | awk / dangling commit / {print $ 3} ') Cherry Pick the Stash: git cherry-pick -m 1 $ stash_hash_code Разрешить конфликты, если они используются: git mergetoolКроме того, у вас могут возникнуть проблемы с сообщением о фиксации, если вы используете gerrit. Пожалуйста, скопируйте свои изменения, прежде чем следовать следующим альтернативам:
Определить удаленный хэш-код: gitk --all $ (git fsck --no-reflog | awk / dangling commit / {print $ 3} ') Вы также можете записать изменения, переустановить и подтвердить.git fsck --unreachable | grep commit должен показать sha1, хотя список, который он возвращает, может быть довольно большим. git show <sha1> покажет, является ли это фиксацией, которую вы хотите.
git cherry-pick -m 1 <sha1> объединит фиксацию в текущей ветке.
Если вы не закрыли терминал, просто посмотрите на результат из git stash pop, и вы получите идентификатор объекта упавшего файла. Обычно это выглядит так:
$ git stash pop
[...]
Dropped refs/stash@{0} (2ca03e22256be97f9e40f08e6d6773c7d41dbfd1)
(Обратите внимание, что git stash drop также создает одну и ту же строку.)
Чтобы вернуть этот штамп, просто запустите git branch tmp 2cae03e, и вы Я получу его как ветку. Чтобы преобразовать это в stash, запустите:
git stash apply tmp
git stash
Наличие его как ветви также позволяет вам свободно манипулировать им; например, чтобы вишнево выбрать или объединить его.
Я хочу добавить к принятому решению еще один хороший способ пройти все изменения, когда у вас либо нет gitk, либо нет X для вывода.
git fsck --no-reflog | awk '/dangling commit/ {print $3}' > tmp_commits
for h in `cat tmp_commits`; do git show $h | less; done
Затем вы получаете все различия для этих хэшей отображаются один за другим. Нажмите «q», чтобы перейти к следующему разлому.
Почему люди задают этот вопрос? Потому что они еще не знают или не понимают reflog.
Большинство ответов на этот вопрос дают длинные команды с вариантами, которые почти никто не запомнит. Поэтому люди приходят к этому вопросу и копируют все, что им кажется нужным, и забывают об этом почти сразу после этого.
Я бы посоветовал всем с этим вопросом просто проверить reflog (git reflog), не намного больше , Как только вы увидите список всех коммитов, существует сто способов узнать, какую фиксацию вы ищете, и вишнево-выбрать или создать ветку из нее. В этом процессе вы узнаете о рефлоге и полезных вариантах для различных основных команд git.
Мне понравился подход Аристотеля, но мне не нравилось использовать GITK ... поскольку я привык использовать GIT из командной строки.
Вместо этого я взял оборванные коммиты и вывел код в файл DIFF для просмотра в моем редакторе кода.
git show $( git fsck --no-reflog | awk '/dangling commit/ {print $3}' ) > ~/stash_recovery.diff
Теперь вы можете загрузить полученный файл diff / txt (его в вашей домашней папке) в ваш редактор txt и посмотреть фактический код и полученный SHA.
Затем просто используйте
git stash apply ad38abbf76e26c803b27a6079348192d32f52219
Просто хотел упомянуть об этом дополнении к принятому решению. Это было сразу не очевидно для меня в первый раз, когда я попробовал этот метод (может быть, он и должен был быть), но для применения stash из хэш-значения просто используйте «git stash apply»:
$ git stash apply ad38abbf76e26c803b27a6079348192d32f52219
Когда я был новичком в git, мне это было непонятно, и я пытался использовать разные комбинации «git show», «git apply», «patch» и т. Д.
Я не могу получить ответы на работу в Windows в простом командном окне (в моем случае - Windows 7). awk, grep и Select-string не были распознаны как команды. Поэтому я попробовал другой подход:
первый запуск: git fsck --unreachable | findstr "commit" скопировать вывод в блокнот find заменить «unreachable commit» на start cmd /k git showбудет выглядеть примерно так:
start cmd /k git show 8506d235f935b92df65d58e7d75e9441220537a4 start cmd /k git show 44078733e1b36962571019126243782421fcd8ae start cmd /k git show ec09069ec893db4ec1901f94eefc8dc606b1dbf1 start cmd /k git show d00aab9198e8b81d052d90720165e48b287c302e
первый запуск: git fsck --unreachable | findstr "commit" скрипт откроет кучу окон команд, показывая, что каждая фиксация копирует вывод в блокнот [ ! d3]может быть не лучшим решением, но работал для меня
Другой распространенный вариант использования: вы пытались выскакивать на неправильную ветку и возникали конфликты?
Все, что вы хотите, - это отменить поп, но сохраните его в списке, чтобы вы могли вывести его на нужную ветку.
Чтобы исправить это, сделайте следующее:
git reset HEAD --hard
git checkout my_correct_branch
git stash pop
Done!
Я случайно удалил тайник в приложении GitUP. Просто нажмите Ctrl + Z, чтобы отменить его.
Возможно, это помогает кому-то;)
Вы можете перечислить все недостижимые коммиты, написав эту команду в терминале -
git fsck --unreachable
Проверить недостижимый хеш фиксации -
git show hash
Наконец, применитесь, если вы найдете скрытый элемент -
git stash apply hash