Почему это не коммит и из него нельзя создать ветку?
Мне нужно работать со сложной конфигурацией репозиториев. У меня 5 из них:
- Удаленный центральный репозиторий на машине 1.
- Мой локальный репозиторий на моем ноутбуке (машина 2).
- Пустой репозиторий на машине 3.
- Хранилище на машине 3.
- Репозиторий на машине 4, где мы делаем обзор кода.
Итак, я понимаю, что это работает так:
- На моем ноутбуке (машина 2) я клонирую / извлекаю из центрального хранилища, расположенного на машине 1.
- Я проталкиваю локальный репо на машину 3 (используя пустой репозиторий в качестве "промежуточного").
Теперь я сделал некоторые изменения на машине 3 и хочу перенести эти изменения на машину 4. Вот инструкции, которым я должен следовать:
- На машине 3 делай всю работу в своей тестовой ветке, коммит.
- Push к вашему репо на машине 3: git push origin test-branch
- На вашем ноутбуке: получить новые коммиты из репозитория machine-3: git fetch machine3
- Проверьте свою ветку с машины 3: git checkout -b test-branch machine-3 / test-branch
- Fetch фиксирует из machine-4: git fetch origin
- git rebase origin / master
- git push origin HEAD: refs / for / master
У меня проблемы с шагом 4. Я получаю следующую ошибку:
fatal: 'machine3/test-branch' is not a commit and a branch 'test-branch' cannot be created from it
ADDED
Когда я выполню
git rev-parse machine3/test-branch
На моем ноутбуке (машина 2) я получаю:
machine3/test-branch
fatal: ambiguous argument 'machine3/test-branch': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
18 ответов
Для тех, кто нашел это в поисках ответа на fatal: 'origin/branch' is not a commit and a branch 'branch' cannot be created from it
Вы также можете попробовать git fetch
первый.
Если вы бежите git checkout -b local-branch-name origin/different-branch-name
без fetch
Во-первых, вы столкнетесь с этой ошибкой.
У нас была такая ошибка:
fatal: 'origin/newbranch' is not a commit and a branch 'newbranch' cannot be created from it
потому что мы сделали минималистичный клон, используя:
git clone --depth 1 --branch 'oldbranch' --single-branch 'git@github.com:user/repo.git'
Для нас минималистичное исправление было:
git remote set-branches --add 'origin' 'newbranch'
git fetch 'origin'
git checkout --track 'origin/newbranch'
Предположим, что удаленное устройство называется origin, а удаленная ветвь - newbranch.
Мне удалось исправить это с помощью этих настроек, просто обновите конфигурацию с помощью этой команды
git config -e --global
и добавьте этот конфиг.
[remote "origin"]
url = https://git.example.com/example.git (you can omit this URL)
fetch = +refs/heads/*:refs/remotes/origin/*
и тогда вы можете
git fetch --all
Я обнаружил, что этот вопрос устраняет более простую проблему: я получил ту же ошибку, пытаясь создать ветвь lobal с удаленного компьютера. Я решил это, создав ветвь из хеша коммита:
git ls-remote origin remote-branch
returned
<hash> refs/heads/remote-branch
git checkout -b local-branch <hash>
Если вы проверяете ветку по тегу (например, git checkout -b XXXX v0.1.1
), можешь попробовать git fetch --tags
первый.
Вопрос сложный / замысловатый, ответ простой. Произошло несоответствие между псевдонимом и машиной3. Псевдоним для удаленного, который был использован, не был для machine3. У machine3 был другой псевдоним.
У нас была эта точная ошибка на машине Windows, на которой запущен gitbash в папке, синхронизированной с диском Google.
Это было вызвано включенной функцией «Включить экспериментальный встроенный монитор файловой системы».
После удаления и переустановки gitbash с отключенной функцией это было исправлено.
Я только что столкнулся с этим, когда использовал инструмент «копировать» на GitHub рядом с названием ветки PR коллеги. Его ветвь была названа какcoworker/ticket-number
иgit checkout --track coworker/ticket-number
вот что получилось из пасты.
Когда я вернулся к своему обычному рабочему процессу, используяgit branch -r | grep ticket-number
Я обнаружил, что фактическое имя ветки, которое мне нужно было использовать, былоorigin/coworker/ticket-number
.
Я использую другой подход. Я изменил свою локальную конфигурацию флаттера, используя
flutter % git config -e --local
вместо изменения глобальной конфигурации. (Примечание: это нужно сделать в домашнем каталоге SDK flutter)
Запуск этого открывает файл
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://github.com/flutter/flutter.git
fetch = +refs/heads/stable:refs/remotes/origin/stable
[branch "stable"]
remote = origin
merge = refs/heads/stable
Изменить
stable
путь под
[remote origin]
к
*
(или в нужную ветку, в этом случае
dev
), чтобы передать вам этот файл.
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://github.com/flutter/flutter.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "stable"]
remote = origin
merge = refs/heads/stable
Сохрани это. После этого вы сможете запустить
flutter channel dev
.
По этому вопросу:
fatal: 'machine3/test-branch' is not a commit and a branch 'test-branch' cannot be created from it
Для меня я должен был сначала проверить, затем он работал нормально и создал новую ветку из
test-branch
.
Для тех, кто нашел это в поисках ответа наfatal: 'origin/remote-branch-name' is not a commit and a branch 'local-branch-name' cannot be created from it
, еще одна возможность, которую мы только что обнаружили, заключается в том, что удаленная ветка уже была объединена :embarrassed:
Мои проблемы заключались в том, что у меня был пробел в имени моей новой ветки
Проблема:
git checkout -b my-new-branch name
вместо
git checkout -b my-new-branch-name
У меня была проблема, когда яgit checkout name-branch
и он был создан, но когда я проверяю ветку с помощьюgit branch
ничего не происходит после нескольких часов попыток выяснить, я пытался запустить командуgit push GitHub-URL name-branch
и он подталкивает фиксацию непосредственно к ветке, надеюсь, это поможет
Проверьте свою конфигурацию git в папке .git и подтвердите это содержимое.
[core]
repositoryformatversion = 0
fileMode = false
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "origin"]
url = https://github.com/ABC/project0001.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "main"]
remote = origin
merge = refs/heads/main
[pull]
ff = no
[branch "develop"]
remote = origin
merge = refs/heads/develop
[remote "origin"]
<-- этот раздел
Филиал не существует в указанном удаленном источнике. Перепроверьте: возможно, вы пытаетесь сорвать апельсины с виноградного дерева.
Я столкнулся с той же ошибкой, и исправить ее было так же просто, как создать ветку в два этапа:
- git checkout существующую ветку, из которой я хочу создать новую ветку. например, git checkout dev. Это приведет вас к ветке разработки.
- создайте новую ветку из ветки dev, находясь в ветке dev, например, git checkout -b <new_feature_branch> dev
Я использовал рабочий процесс git в коде Visual Studio, как показано на диаграмме ниже, чтобы решить мою проблему:
Решение от J.D. Mallen включает в себя
Начиная с VSCode 1.53 (январь 2021 г.) у вас будут ( выпуск 110811 и PR 111090):
Изменение
autofetch
в строковую конфигурацию, в которой есть "current
", "" а также "off
".Это позволяет пользователям получать данные со всех пультов, а не только со своих
origin
.
Для разработчиков, работающих над вилкой, это должно сделать работу расширений более интуитивно понятной.
Итак, если вы установите параметр VSCode
git.autofetch
к "
all
", вам даже не нужно будет вводить
git fetch --all
.