Ответ 1
Просто нажмите эту ветвь на другое название ветки
git push -u origin branch_name: branch_name_test
Я попытался выполнить этот пост, но запутался, а не решил мою проблему.
Вот сценарий.
Я создал ветку вроде git checkout -b <branch_name>
. Затем я работал над некоторыми изменениями и делал
git add .
git commit -m "comment"
Теперь все эти изменения находятся в моей незанятой локальной ветке <branch_name>
. То, что я хочу сделать, - это нажать эти изменения вверх по течению, но я хочу направить его на ветвь, которая не существует, например, <branch_name>_test
Я не хочу нажимать его на <branch_name>
. Как я могу это сделать.
Просто нажмите эту ветвь на другое название ветки
git push -u origin branch_name: branch_name_test
Во-первых, учтите, что git push
"хочет" еще два аргумента и автоматически их создаст, если вы их не предоставите. Поэтому основная команда git push remote refspec
.
Часть remote
обычно тривиальна, так как почти всегда просто слово origin
. Более сложная часть - refspec
. Чаще всего люди пишут название ветки здесь: git push origin master
, например. Это использует вашу локальную ветвь, чтобы нажать на ветвь с таким же именем 1 на пульте дистанционного управления, создав при необходимости. Но это не должно быть просто имя ветки.
В частности, a refspec
имеет две части, разделенные двоеточиями. Для git push
часть слева идентифицирует то, что нужно нажать, 2 а часть справа указывает имя, которое дано удалённому. Часть слева в этом случае будет branch_name
, а часть справа будет branch_name_test
. Например:
git push origin foo:foo_test
Как вы делаете push, вы можете указать своему git push
установить имя ветки вверх по течению, добавив -u
в параметры git push
. Установка имени восходящего потока делает ваш git сохранением имени foo_test
(или любого другого), поэтому будущий git push
без аргументов, пока вы находитесь на ветке foo
, может попытаться нажать на foo_test
на пульте дистанционного управления (git также сохраняет в этом случае пульт дистанционного управления, origin
, так что вам также не нужно вводить его).
Вам нужно пройти только -u
один раз: он просто запускает git branch --set-upstream-to
для вас. (Если вы позже перейдете -u
, он снова запустит настройку восходящего потока, изменив ее как указано, или вы можете запустить git branch --set-upstream-to
самостоятельно.)
Однако, если ваш git равен 2.0 или новее, и вы не установили какую-либо специальную конфигурацию, вы столкнетесь с тем же, что и я, чтобы ввести сноску 1 выше: push.default
будет установлено на simple
, который откажется от нажатия, потому что имя вверх по течению отличается от вашего собственного локального имени. Если вы установите push.default
на upstream
, git перестанет жаловаться, но самое простое решение - сначала переименовать локальную ветвь, чтобы совпадали локальные и удаленные имена. (Какие настройки для установки и/или переименование ветки, зависит от вас.)
1 Точнее, git справляется с настройкой remote.remote.push
, чтобы получить верхнюю половину refspec. Если вы ничего здесь не задали, по умолчанию используется одно и то же имя.
2 Это не должно быть имя ветки. Например, здесь вы можете указать HEAD
или хеш фиксации. Если вы используете что-то другое, кроме имени ветки, вам может потребоваться указать полный refs/heads/branch
справа (хотя это зависит от того, какие имена уже находятся на пульте дистанционного управления).
git push --set-upstream origin <branch_name>_test
--set-upstream
устанавливает связь между вашей локальной ветвью и удаленным. Вам нужно только сделать это в первый раз. При последующих нажатиях вы можете просто:
git push
Если вы еще не установили origin
, используйте:
git remote add origin <repository_url>
затем повторите приведенную выше команду.
В современных версиях Git команда для использования:
git push -u origin <branch_name_test>
Это автоматически установит имя ветки для отслеживания с пульта дистанционного управления и нажимает один раз.
Вы можете направить свою локальную ветвь на новую удаленную ветку, например:
git push origin master:test
(Предполагая, что origin
- ваш пульт, master
- имя вашего локального ветки, а test
- имя новой удаленной ветки, которую вы хотите создать.)
Если вы хотите настроить локальную ветвь для отслеживания вновь созданной удаленной ветки, вы можете сделать это с помощью -u
(в новых версиях Git) или --set-upstream
, поэтому:
git push -u origin master:test
или
git push --set-upstream origin master:test
... создаст новую удаленную ветвь с именем test
в удаленном репозитории origin
на основе локального master
и настроит локальный master
для ее отслеживания.