git push в удаленную ветку - PullRequest
48 голосов
/ 08 июня 2011

Народ,

Я клонировал репо.Я создал из него ветку для работы с функцией, введя следующую команду:

git branch fix78

, затем я работал над этой веткой

git checkout fix78

Я продолжал делать коммиты в эту локальную ветку.Теперь я хотел перенести это в репозиторий и, следовательно, я выполнил следующую команду:

git push origin master:fix78

Я просмотрел репо из веб-браузера и увидел, что была создана новая ветка с именем fix78.на репо.Но у меня не было ни одного из моих коммитов, которые я сделал.

Что я здесь не так делаю?Вот чего я пытаюсь добиться:

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

Любая помощь / обратная связь будет просто потрясающей.

Спасибо.

Ответы [ 2 ]

61 голосов
/ 08 июня 2011

git push origin master:fix78 переводит локальный мастер в удаленную ветку с именем fix78. Вы хотели отправить локальную ветку fix78, которая имеет тот же синтаксис, но без master:

Вы можете исправить это, выполнив git push origin :fix78, чтобы удалить удаленную ветку, а затем git push origin fix78, чтобы отправить локальную ветку в удаленное хранилище.

52 голосов
/ 08 июня 2011

Команда push имеет вид

git push remote_name source_ref:destination_ref

Все, что вам нужно сделать, чтобы исправить ошибку, это

git push origin +fix78:fix78

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

Альтернативный синтаксис:

git push -f origin fix78

, если вы опускаете пункт назначения, подразумевается, что это то же имя.Если отслеживание настроено на конкретную ветку на пульте, оно перейдет к этой.Удаление веток имеет 2 синтаксиса, старый:

git push -f origin :fix78

и

git push --delete origin fix78

Первый читается как «ничего не вставлять в fix78», что удаляет его.

OneХитрость в том, что если вы укажете . в качестве удаленного имени, это означает, что текущее хранилище будет удаленным.Это полезно для обновления локальной ветви без необходимости проверять ее:

git push . origin/master:master

обновит мастер без необходимости извлекать мастер.

Надеюсь, это поможет

...