сделал
git branch local_branch_name origin/branch_name
после изменения пишу
git push origin/local_branch_name
ошибка
в чем ошибка? Как можно решить?
сделал
git branch local_branch_name origin/branch_name
после изменения пишу
git push origin/local_branch_name
ошибка
в чем ошибка? Как можно решить?
Беда-а.
git branch не переключает активную ветку!Вы сделали ветку, но не переключились на неё, и коммит сделали не в неё.
В "ежедневном git-обиходе" вы почти не будете пользоваться git branch напрямую, скорее вы будете использовать checkout с опцией -b (от branch):
git checkout -b новая-ветка
...что сделает ветку там же, где вы (HEAD) сейчас, а также переключится на неё. Если вы хотите ветку в каком-то другом месте, то его и укажите:
git checkout -b новая-ветка место-новой-ветки
origin/*)!Единственное, для чего они нужны, это для индикации вам, где находятся ветки сервера. Даже при взаимодействии с сервером вы эти ветки указывать не будете, поскольку для сервера их не существует. И коммитить в них не принято. Общий вид git-push такой:
git push <сервер> <откуда-локально>:<куда-на-сервере>
Плюс сокращённые формы:
git push <сервер> <откуда-локально> # зальётся в ветку "за которой следит"
git push # как выше, но текущая ветка
Я полагаю, события развивались следующим образом:
git checkout origin/DIMA # это уже крайне подозрительное действие
git branch DIMA origin/DIMA # создали ветку, но не переключились
git commit ... # что-то закоммитили: ой, вы же были в detached HEAD вне веток!
git commit ... # ещё что-то закоммитили!
...и если я приблизительно прав, то проблема решится просто мёрджем "коммитов-потеряшек" (англ. dangling commits) в ветку, куда они предназначались изначально; если ветка сейчас точно позади них (и не ушла с тех пор вперёд), то произойдёт fast-forward. Поэтому добавим в мердж флаг --ff-only, чтобы если я неправ (и вы сломали репозиторий сильнее, чем я думал), мерджа не произошло.
Сначала зафиксируем "потеряшек", обозначив им стабильное место в истории.
"В любой непонятной ситуации делай ветку"
git checkout -b marker
Теперь надо идти туда, куда эти коммиты предназначались.
git checkout DIMA
А теперь попробуем перемотать DIMA вперёд, включив в него бывших "потеряшек":
git merge --ff-only marker
...и если мердж произошёл, то, похоже, я угадал ваш сценарий, и выглядит он, с моими манипуляциями (после первой команды => после третьей), примерно так:
И теперь, по идее, можно сделать просто git push (без всего) и ветка уйдёт на сервер.
Это коммиты, до которых нельзя добраться от "зафиксированных точек", следуя "назад" (по ссылкам на родительские коммиты). Такими "зафиксированными точками" являются ветки (branch) и метки (tag).
Все коммиты, до которых Git не может дойти от таких точек, являются мусором и подлежат удалению когда-нибудь, гарантировать их сохранность уже нельзя, их в любой момент может съесть git gc. Отсюда и "потеряшки", для истории эти коммиты потеряны, если кто-то (например, git reflog) не записал их хэш.
Такие коммиты порождает, например, git commit --amend, или любой содержательный (не fast-forward) git rebase.
git branch local_branch_name origin/branch_nameне хороший вариант для работы? Получается просто надо клонировать себе в master и пушить как origin, да? – bemulima Mar 21 '16 at 09:40git branch local_branch_name origin/branch_name- это создать ветку на базе другой, но перейти в нее!!!! нужно явно перейти с помощью checkout. – KoVadim Mar 21 '16 at 09:41push, никак? – bemulima Mar 21 '16 at 09:46