Чтобы использовать методы и член объекта, вам сначала нужно создать этот объект. Если вы его не создали (переменная, которая должна содержать объект, не инициализируется), но вы пытаетесь использовать его методы или переменные, вы получите эту ошибку.
Иногда вы можете просто забыть инициализировать .
Отредактировано: new не может вернуть значение null, но исключение огня при ошибке. Давно это было на некоторых языках, но не больше. Спасибо @John Saunders за указание на это.
Проблема в том, что вы не можете сделать это в общем случае. Предположим, что Алиса изменила конкретный файл, затем Боб меняет его - включая части, которые Алиса изменила - и, наконец, Алиса снова изменит его. Как вы совмещаете два дифференциала Алисы с одним различием? Если вы возьмете их как два патча, второй просто не будет применяться без применения патча Боба! Но вы также не можете просто отличить окончательное состояние от оригинала, потому что это будет включать изменения Боба.
Если вы предпочитаете пример с git-операциями, это похоже на интерактивную rebase и просто удаление случайных совершает. Конечно, иногда это сработает, но иногда это просто полностью терпит неудачу, потому что один из этих коммитов зависел от одного из тех, что вы вытащили.
Итак, я знаю, вы сказали, что не хотите индивидуальная фиксация diff, но это все, на что вы действительно можете надеяться:
git log -p --author=Alice
Или, если вы действительно отчаянно нуждаетесь в одном различии, это получит его для вас, но только в тех случаях, когда нет как я упоминал выше:
git checkout -b temp first_commit
git log --pretty=%H --author=Alice first_commit..second_commit |
while read commit; do
git cherry-pick $commit || exit
done
# or if you have a new version of git, cherry-pick works with multiple arguments:
# git cherry-pick $(git log --pretty=%H --author=Alice first_commit..second_commit)
git diff first_commit temp
Это действительно требует операций в дереве работы, потому что нет абсолютно никакой гарантии, что какой-либо из патчей будет применяться после пропущения фиксации. Вам просто нужно попробовать и посмотреть.
Возможно, вы можете использовать функции форматирования diff-tree
format:<string>
Формат
format:<string>
позволяет вам указать, какую информацию вы хотите отобразить , Это немного похоже на форматprintf
, за исключением того, что вы получаете новую строку с%n
вместо\n
.Например,
format:"The author of %h was %an, %ar%nThe title was >>%s<<%n"
будет выглядеть примерно так:
The author of fe6e0ee was Junio C Hamano, 23 hours ago The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<
Затем вы можете grep на соответствующем авторе.