Получение ошибки 'receive.denyCurrentBranch' при нажатии на голое репозиторий Git

Сделайте удаленный репозиторий git bare, на который я вставил ветку с одной машины и вытащил на другую.

Сделал некоторые изменения на другой машине, пытаясь отодвинуть эти изменения обратно в удаленное репозитарий, и я получаю ошибку 'receive.denyCurrentBranch'.

В чем дело?

Это не должно происходить на голом репо - на нем ничего не проверено.

Ветви, как видно из машины 2:

Fix
dev1
dev2
remotes/origin/HEAD -> origin/dev1
remotes/origin/Fix
remotes/origin/dev1
remotes/origin/dev2
remotes/origin/master

"Fix" - это текущая ветка на обеих машинах разработчика.

Когда я первоначально вытащил эту ветку на машине 2, я сделал:

git pull
git checkout -b Fix origin/Fix

Я с подозрением отношусь к первой строке 'remotes' - кажется, что HEAD должен указывать на мою текущую ветку, но это не так. Думаю, я что-то упустил, здесь..

Обновление 1 Я слил ветку 'Fix' с веткой dev1, а затем протолкнул ветку 'dev1' - все работало нормально (я все равно собирался это сделать).

Таким образом, это был обходной путь, но я думаю, что реальная проблема заключалась в том, что HEAD был привязан не к текущей ветви ("Fix"), а к неактивной ветви ("dev1"). Я не уверен, как сменить голову на удаленном репо?

1 ответ

С компьютера 2 для загрузки ссылок из локального репозитория в удаленный репозиторий вы можете использовать явные ссылки в команде push:

git push origin Fix:refs/heads/Fix

После этого на компьютере 1 вы должны использовать команду fetch для получения удаленных ссылок.

git fetch

В списке ветвей (git branch -a) вы найдете origin/Fix (или remotes/origin/Fix), вы можете просматривать содержимое удаленной ветви напрямую, используя команду checkout:

git checkout origin/Fix

Внесите изменения, зафиксируйте и т. Д., А затем нажмите его, используя ту же команду, что и на компьютере 2

git push origin Fix:refs/heads/Fix

Чтобы отследить ветку (то есть создать локальную ветку, которая "указывает" на удаленную ветку, используйте команду checkout с параметром --track):

git checkout --track -b Fix origin/Fix

Затем вы можете работать с локальной веткой Fix и делать push и pull без других аргументов.

git pull
git commit
git push
Другие вопросы по тегам