Текущий язык Spec: технически, порядок не указан.
Текущие браузеры: порядок сохраняется с большим исключением таких ключей, как «7», которые анализируются как целые числа и обрабатываются по-разному с помощью Chrome / V8.
Спецификация будущего языка (> ES2015): Как правило, вы можете ожидать, что упорядоченные сегодня вещи не будут неупорядочены. Новые API гарантируют заказ; существующие API трудно изменить. См. Ответ JMM для более подробной информации.
Лучшая ссылка ниже приведена в комментарии Tim Down:
http://code.google.com/p/v8/issues/ detail? id = 164
Эта ошибка подробно описывает проектные решения, связанные с реализацией ключевых заказов Chrome. Один вывод - это то, что для строковых ключей, которые не анализируют целое число (то есть «a» или «b», но не «3»), клавиши печатаются в порядке ввода во всех основных браузерах, и хотя это поведение не является «стандартизировано», оно IS считается существенной проблемой обратной совместимости поставщиками браузеров. Используйте на свой страх и риск.
По одному из (довольно упрямых) комментариев:
Стандарты всегда следуют за реализациями, вот откуда появился XHR, и Google делает то же самое путем внедрения Gears и последующего использования эквивалентной функциональности HTML5. Правильное решение состоит в том, чтобы ECMA формально включала де-факто стандартное поведение в следующий оборот спецификации.
blockquote>Если вы полагаетесь на порядок вставки, вы находитесь за пределами спецификации ECMAScript, но внутри де-факто стандарт общего поведения браузера , если ваши ключи не анализируются как целые числа .
Удалите самую последнюю фиксацию, сохранив проделанную вами работу:
git reset --soft HEAD~1
Удалите самую последнюю фиксацию, уничтожив работу , которую вы сделали done:
git reset --hard HEAD~1
Выполните git rebase -i FAR_ENOUGH_BACK
и отбросьте строку для фиксации, которую вы не хотите.
Не удаляйте его: для одной фиксации достаточно git cherry-pick
.
Но если у вас было несколько коммитов на неправильной ветке, то здесь светится git rebase --onto
:
Предположим, у вас есть это:
x--x--x--x <-- master
\
-y--y--m--m <- y branch, with commits which should have been on master
, тогда вы можно пометить master
и переместить его туда, где вы хотели бы быть:
git checkout master
git branch tmp
git checkout y
git branch -f master
x--x--x--x <-- tmp
\
-y--y--m--m <- y branch, master branch
, сбросить ветку y туда, где она должна была быть:
git checkout y
git reset --hard HEAD~2 # ~1 in your case,
# or ~n, n = number of commits to cancel
x--x--x--x <-- tmp
\
-y--y--m--m <- master branch
^
|
-- y branch
, и, наконец, переместить ваши коммиты (повторно применить их, сделав фактически новые коммиты)
git rebase --onto tmp y master
git branch -D tmp
x--x--x--x--m'--m' <-- master
\
-y--y <- y branch
Если вы хотите переместить этот коммит в другую ветвь, получите SHA-код рассматриваемого коммита
git rev-parse HEAD
Затем переключите текущую ветвь
git checkout other-branch
И вишневый выбор
фиксация в other-branch
git cherry-pick <sha-of-the-commit>