Мерзавец - является этим получение по запросу или переоснова при работе над ответвлениями с другими людьми

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

33
задан lucapette 10 July 2012 в 19:27
поделиться

5 ответов

Получение по запросу мерзавца является комбинацией 2 команд

  • выборка мерзавца (синхронизирует Ваш локальный repo с новейшим материалом на удаленном)
  • слияние мерзавца (объединяет изменения от удаленного ответвления, если таковые имеются, в Ваше локальное ответвление отслеживания)

, перебазой мерзавцев является только грубый эквивалент слиянию мерзавца. Это ничего не выбирает удаленно. На самом деле это не делает надлежащего слияния также, это воспроизводит фиксации ответвления, на котором Вы стоите после новых фиксаций от второго ответвления.

Его цель состоит в том, чтобы главным образом позволить Вам иметь более чистую историю. Не требуются многих слияний многими людьми, прежде чем прошлое в gitk станет ужасно подобным спагетти.

лучшее графическое объяснение видно в первых 2 графике здесь . Но позвольте мне объяснить здесь с примером.

у меня есть 2 ответвления: ведущее устройство и mybranch. При положении на mybranch я могу работать

git rebase master

, и я получу что-либо новое в ведущем устройстве, введенном перед моими новыми фиксациями в mybranch. Это прекрасно, потому что, если я теперь объединяю или повторно основываю материал от mybranch в ведущем устройстве, мои новые фиксации добавляются линейно прямо после новых фиксаций.

проблема, к которой Вы обращаетесь, происходит, если я повторно базируюсь в "неправильном" направлении. Если я просто получил новое ведущее устройство (с новыми изменениями), и от ведущего устройства я повторно базируюсь как это (перед синхронизацией моего ответвления):

git rebase mybranch

Теперь то, что я просто сделал, - то, что я вставил свои новые изменения где-нибудь в прошлое ведущего устройства. Основная строка фиксаций изменилась. И из-за пути мерзавец работает с идентификаторами фиксации, все фиксации (от ведущего устройства), которые были просто воспроизведены по моим новым изменениям, имеют новые идентификаторы.

ну, немного трудно объяснить только в словах... Надежда это имеет немного смысла :-)

Так или иначе, мой собственный рабочий процесс, является этим:

  • 'получение по запросу мерзавца' новые изменения от удаленного
  • переключатель к mybranch
  • 'мерзавец повторно основывает ведущее устройство', чтобы внести новые изменения ведущего устройства в моей истории фиксации
  • переключатель назад ведущему устройству
  • 'слияние мерзавца mybranch', который только ускоренная перемотка вперед, когда все в ведущем устройстве находится также в mybranch (таким образом избегающий проблемы переупорядочения фиксации на общедоступном ответвлении)
  • 'нажатие мерзавца'

Одно последнее слово. Я настоятельно рекомендую использовать переоснову, когда различия тривиальны (например, люди, работающие над различными файлами или по крайней мере различными строками). Это имеет глюк, который я пытался объяснить просто там, но это делает для намного более чистой истории.

, Как только могут быть значительные конфликты (например, коллега переименовал что-то в наборе файлов), я настоятельно рекомендую слияние. В этом случае Вас попросят разрешить конфликт и затем фиксировать разрешение. Зато, слияние намного легче разрешить, когда существуют конфликты. Вниз сторона - то, что Ваша история может стать твердой следовать, если много людей делает слияния все время :-)

Удачи!

51
ответ дан 27 November 2019 в 18:03
поделиться

Мерзавец rebase является переписыванием истории. Вы никогда не должны делать этого на ответвлениях, которые "общедоступны" (т.е. ответвления, которые Вы совместно используете с другими). Если кто-то клонирует Ваше ответвление, и затем Вы повторно основываете то ответвление - затем они больше не могут вытягивать/объединять изменения от Вашего ответвления - они должны будут выбросить свой старый и переполучение по запросу.

Эта статья о упаковочное программное обеспечение с мерзавцем является очень стоящим чтением. Это больше о руководящих дистрибутивах программного обеспечения, но это является довольно техническим и говорит о том, как ответвления могут использоваться/суметься/совместно использоваться. Они говорят о том, когда повторно базироваться и когда вытянуть и каковы различные последствия каждого.

Короче говоря, у них обоих есть свое место, но Вы должны действительно grok различие.

10
ответ дан 27 November 2019 в 18:03
поделиться

git pull делает слияние, если у Вас есть фиксации, которые не находятся в удаленном ответвлении. git rebase переписывает любые существующие фиксации, которыми необходимо быть относительно подсказки удаленного ответвления. Они подобны в этом, они могут оба вызвать конфликты, но я думаю с помощью git rebase, если Вы можете допускать более гладкое сотрудничество. Во время переосновной операции можно совершенствовать фиксации, таким образом, они похожи, они были недавно применены к последнему пересмотру удаленного ответвления. Слияние, возможно, более подходит для более длительных циклов разработки на ответвлении, которые имеют больше истории.

Как большинство других вещей в мерзавце, существует большая перекрывающаяся функциональность для размещения различных стилей работы.

6
ответ дан 27 November 2019 в 18:03
поделиться

Если Вы хотите вытянуть источник, не влияя на удаленные ответвления и ни без каких изменений в Вашей локальной копии, лучше использовать получение по запросу мерзавца.

я верю, есть ли у Вас рабочее ответвление, в которое Вы внесли изменения, используйте перебазу мерзавцев для изменения основы того ответвления, чтобы быть последним удаленным ведущим устройством, Вы сохраните все свои изменения ответвления, однако ответвление будет теперь переходить от основного местоположения, а не откуда это ранее перешлось.

0
ответ дан 27 November 2019 в 18:03
поделиться

Проверьте превосходный Gitcasts на Ветвление и слияние , а также перебазирование .

2
ответ дан 27 November 2019 в 18:03
поделиться
Другие вопросы по тегам:

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