Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Отказ от этих коммитов, вероятно, будет иметь некоторые негативные последствия для любого, кто извлекает из вашего хранилища. В качестве другого варианта вы можете рассмотреть возможность создания альтернативной ветки разработки, начиная с A2:
A1-->A2-->A3-->A4 (master/HEAD) \ -->B1-->B2 (new-master/HEAD)
Сделать это так же просто, как
git branch new-master master~2
Вы хотите git-revert
<забастовка> и git-reset
в зависимости от того, как Вы хотите рассматривать A3 и A4. Для удаления всей трассировки A3 и A4 используйте git-reset --hard
. забастовка>, Чтобы сохранить A3 и A4 и записать факт Вы возвращаетесь, используете git-revert
.
редактирование : Aristotle Pagaltzis git-checkout
решение выше, хотя для маленького возвращается, я не вижу проблемы с git-revert
. Тем не менее я прошу, чтобы будущее upvotes было дано ответ Aristotle Pagaltzis
, я нашел волшебство мерзавца быть хорошим ресурсом для мерзавца.
self
ссылки явный (где можно поглядеть на код и легко видеть кандидатов на проблемы цикла сильной ссылки), а не имейте not-so-obvious неявную ссылку на self
Escape one' s внимание. Apple добавила это полезное предупреждение по причине.
– Rob
31 March 2018 в 02:27
От корневого каталога Вашей рабочей копии просто делают
git checkout A2 -- .
git commit -m 'going back to A2'
<час> Используя [1 115] git revert
, с этой целью было бы громоздким, так как Вы хотите избавиться от целой серии фиксаций, и revert
отменяет их по одному.
Вы не хотите git reset
также. Это просто изменит Ваш master
указатель ответвления: Вас оставляют без записи ошибочного направления. Это - также боль для координирования: начиная с фиксации Вы изменились master
на, не ребенок удаленного указателя ответвления repository’s master
, продвижение приведет к сбою †“, если Вы не добавите -f
(сила) или удаляете эти master
ответвление в удаленном репозитории сначала и не воссоздаете его путем продвижения. Но тогда у всех, кто пытается вытянуть, все еще будет старая история в их локальном master
, ответвление, поэтому однажды origin/master
отличается, git pull
попытается выполнить слияние. Это не конец света: они могут выйти из этой ситуации путем выполнения git rebase --onto origin/master $old_origin_master_commit master
(т.е. повторно основывать их локальные фиксации, сделанные сверху старого origin/master
на вершину нового origin/master
). Но Мерзавец не будет знать, чтобы сделать это автоматически, таким образом, необходимо будет скоординировать с каждым сотрудником. Короче говоря, don’t делают это.