ветка git неизвестна, но проверка работает

в моем удаленном репозитории создана новая ветка. В GitBash в моем рабочем каталоге (в основной ветке) я набираю git remote update и git pull. Насколько я понимаю, git remote update обновит все ветки, настроенные для отслеживания удаленных, как описано здесь: В чем разница между 'git remote update', 'git fetch' и 'git pull'?

Поэтому, когда я набираю git diff master newBranch --name-only, я ожидал увидеть список файлов, которые различаются в обеих ветках. Но вместо этого я получил следующее сообщение об ошибке:

фатальный: неоднозначный аргумент 'newBranch': неизвестная ревизия или путь не в рабочем дереве.

Но если я наберу git checkout newBranch, все будет работать нормально, а если я вернусь к мастеру, набрав git checkout master, вдруг git diff master newBranch --name-only будет работать отлично?

Может ли кто-нибудь объяснить мне это поведение?


person airborne    schedule 22.06.2017    source источник


Ответы (2)


Как вы упомянули, у вас нет локальной копии ветки «newBranch», поэтому вам нужно указать, что вы хотите выполнить сравнение с тегом ветки с удаленного устройства, например:

git diff origin/master origin/newBranch --name-only

или если у вас есть мастер локально:

git diff master origin/newBranch --name-only

Проверьте, какие ветки у вас есть локально:

git branch -l

or

git branch

проверить удаленные ветки

git branch -r

проверить все ветки:

git branch -a

Так что это сработало для вас после того, как вы сделали проверку, потому что git автоматически создал локальную ветку с именем newBranch. Таким образом, до вашей проверки git branch не будет отображаться ветка с именем "newBranch", но после проверки она будет.

person code_fodder    schedule 22.06.2017

Когда вы набрали git diff master newBranch --name-only в первый раз, у вас не было локальной ветки newBranch. Итак, выдает ошибку:

фатальный: неоднозначный аргумент 'newBranch': неизвестная ревизия или путь не в рабочем дереве.

Позже, когда вы выгрузите в newBranch команду git checkout newBranch, будет создана новая локальная ветвь. Итак, в следующий раз git diff master newBranch --name-only тоже сработает.

Примечание. git checkout newBranch фактически находит локальную newBranch ветку, если она найдена, а затем переключается на нее. Но если не найдено, то находит в списках удаленных ветвей, если найдено, создайте новую локальную ветвь newBranch, отслеживающую удаленную ветвь newBranch.

person Sajib Khan    schedule 22.06.2017