Перенос локальной работы во вновь созданную ветку - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу, чтобы pu sh моя локальная работа в филиале, я попробовал следующие команды на master:

git add -A
git commit -m "message of commit"
git push -u origin <branch_name>

И получает ошибку: sr c refspe c не удалось pu sh некоторые ссылки на репо. также, если тянуть (на ветке master) и разрешать конфликты (не знаю, почему я должен их разрешать) между существующим master и моим кодом, я все еще не могу отправить sh в новую ветку.

Если я пу sh, установив ГОЛОВУ, то это работает, но я не хочу пу sh к отсоединенной голове. Проблема довольно проста (pu sh код недавно созданной ветки), но она не работает.

Спасибо за ваши предложения.

Ответы [ 2 ]

1 голос
/ 28 апреля 2020

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

git add -A
git commit -m "message of commit"

Это создало новый коммит, и вы хотели бы отправить его на сервер Git через origin без сначала создайте имя новой локальной ветки newbranch; но вы бы хотели, чтобы Git не называлось это master, а скорее чтобы называть это newbranch. Вы можете просто запустить:

git push origin master:newbranch

или:

git push origin HEAD:newbranch

Вариант с HEAD работает независимо от того, названа ли текущая ветвь master.


Причина, по которой не делает это, достаточно проста: имя вашей ветви master (или что бы то ни было) теперь соответствует newbranch сервера, и вам нужно помнить, чтобы использовать ваш локальный имя origin/newbranch для работы с вашей веткой с именем master. Ваша ветка с именем master больше не является хорошим способом справиться с их веткой с именем master.

Другими словами, теперь вам нужно держать в голове отображение : "мои newbranch это их master". Git конечно, можно использовать таким образом, но в конечном итоге вы, вероятно, забудете, что делаете это.

Если вы сначала создадите свое собственное имя ветви newbranch, например, так:

git add -A
git status
# oops, I'm on `master`, and I didn't want that, so:
git checkout -b newbranch
git commit -m "message"

затем вы можете:

git push -u origin HEAD

отправить newbranch на origin, используя там имя newbranch, так что ваш newbranch подтолкнет к их newbranch который является вашим origin/newbranch, и теперь ваш newbranch имеет origin/newbranch настроенный в качестве восходящего потока, и вам не нужно запоминать ничего особенного.

Если вы случайно сделали зафиксируйте свой master и wi sh, чтобы отменить это, это достаточно просто. Например, предположим, что вы сделали:

git add -A
git commit -m "message"

и только тогда поняли: ой, я на моем master, теперь вы можете сделать:

git branch newbranch
git reset --hard origin/master
git checkout newbranch

или эквивалентно (но меньше оттока в вашем рабочем дереве):

git checkout -b newbranch
git branch -f master origin/master

(это также на одну команду короче, поэтому лучше двумя способами). Теперь вы находитесь в настройке, где вы находитесь в новой ветке newbranch с вашим новым коммитом, и ваш существующий master снова совпадает с origin/master. Теперь вы можете git push -u origin HEAD отправить коммит и создать новое имя ветки newbranch на другом Git поверх origin, как и раньше.


Обратите внимание, что если вы запустили git pull и он извлек из origin и запустил git merge - вот что делает git pull; он запускает git fetch, за которым следует git merge - и вы находитесь в конфликтном состоянии, вам придется либо завершить sh, либо прервать (завершить без завершения) объединение, прежде чем вы сможете продолжить. Самое простое - прервать слияние:

git merge --abort

, поскольку все, что он делал, было автоматизировано, и вы можете легко получить Git, просто сделайте это позже.

0 голосов
/ 28 апреля 2020

Когда я использую эту команду (без -u), она работает.

git push origin <branch_name>

Другой возможной причиной ошибки является случай, когда <branch_name> не соответствует действительному имени ветви Git .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...