Это относительно легко сделать, но обычно это не правильный способ работы. Предположим, вы сделали это, находясь в своей собственной ветке 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, просто сделайте это позже.