Git push не отправляет файлы
Обновлено: 06.07.2024
Краткое содержание урока, основные инструкции для командной строки, полезные ссылки и советы.
Во втором уроке мы создавали репозитории на github и научились клонировать их. После этого мы работали только с локальным репозиторием, на своей машине. Сегодня мы рассмотрим взаимодействие с удаленным репозиторием.
Что такое push (пуш)
Это отправка данных на сервер, в удаленный репозиторий, на github. Данные - это коммиты и ветки.
Зачем пушить на сервер
- для работы в команде, чтобы делиться своим кодом с коллегами
- чтобы иметь резервную копию на случай потери данных на своей машине
Когда пушить на сервер
Когда сделали новый коммит или несколько коммитов
Как узнать, что есть незапушенные коммиты
В командной строке набрать git status
Ключевая фраза здесь "Your branch is ahead of 'origin/master' by 5 commits.". Это значит, что у нас есть 5 неотправленных на сервер коммитов. Если незапушенных коммитов нет, то картина будет такая
"is up-to-date" означает, что у нас нет незапушенных коммитов
В PhpStorm понять, есть ли неотправленные коммиты, можно посмотрев в окно Version Control - Log, где находятся метка master и origin/master. Если master выше, то есть незапушенные коммиты.
master и origin/master
Это ветки: локальная и удаленная (на сервере, в github). По умолчанию мы находимся в ветке master. Подробно работу с ветками мы рассмотрим в следующем уроке, а пока достаточно запомнить, что master - это то, что на нашей машине, а origin/master - в удаленном репозитории, на github.
git push в терминале
Как пушить в PhpStorm
Правый клик - Git - Repository - Push. - Кнопка Push
Что такое pull (пулл)
Это скачивание данных с сервера. Похоже на клонирование репозитория, но с той разницей, что скачиваются не все коммиты, а только новые.
Зачем пулиться с сервера
Чтобы получать изменения от ваших коллег. Или от себя самого, если работаете на разных машинах
git pull в терминале
- pull - что сделать, получить данные
- origin - откуда, с сервера
- master - а точнее, с ветки master
Как пулить в PhpStorm
Правый клик - Git - Repository - Pull. - Кнопка Pull
Когда что-то пошло не так.
Иногда при работе в команде git push и git pull могут вести себя не так, как пишут в учебниках. Рассмотрим примеры
git push rejected
Вы сделали новый коммит, пытаетесь запушить его, а git в ответ выдает такое
Написано много, но суть в том, что коммит отклонен, пуш не прошел. Почему?
Здесь нас подстерегает неожиданность - в терминале выскакивает окно редактирования коммита. Пока просто сохраним, что предложено по умолчанию и закроем редактор. Вот теперь можно пушить свои коммиты
Все, наши коммиты на сервере. При этом появится странный коммит "Merge branch 'master' of github.com:Webdevkin/site-git". Это так называемый мердж-коммит, о нем чуть ниже.
Если же при попытке пуша новых коммитов на сервере нет, то git push пройдет сразу и отправит наши коммиты на сервер.
Как избавиться от мердж-коммита
Мердж-коммит появляется, когда вы сделали локальный коммит, а после этого подтянули новые коммиты с сервера. Мердж-коммит не несет смысловой информации, кроме самого факта мерджа. Без него история коммитов выглядит чище.
Чтобы избавиться от него, подтягивайте изменения командой git pull с флажком --rebase
При этом ваш локальный коммит окажется "поверх" нового коммита с сервера, а мердж-коммита не будет. И не забудьте после этого запушить свой коммит на сервер.
Мердж-коммит в PhpStorm
PhpStorm помогает избавиться от мердж-коммитов через меньшее количество действий. Если мы запушим локальные коммиты и получим rejected из-за того, что на сервере есть новые коммиты, то PhpStorm выдаст предупреждение, где предложит выбрать вариант: как подтянуть новые коммиты, с мерждем или ребейзом. Жмите кнопку "Rebase", мердж-коммита не будет и при этом локальный коммит сразу запушится на сервер.
ВниманиеОбъяснения в тексте не передают точно возникающие проблемы, это нужно видеть в динамике. Поэтому лучше смотрите видеоуроки и еще лучше пробуйте сами повторять их содержание.
Что могу посоветовать
Если мы работаем в одиночку, то удаленный репозиторий нужен только для сохранения резевной копии. Скорее всего, мы будем в него только пушить.
Но при работе в команде имеет смысл подумать над такими вещами:
- пушить коммиты почаще, чтобы коллеги быстрее получали доступ к новым изменениям
- пулиться почаще - обратная ситуация, почаще получать свежие изменения
- всегда пультесь с флажком ребейза - git pull --rebase origin master
- не удивляйтесь, что при пуллах и пушах могут возникать подобные ситуации, как мы рассматривали выше
- не стесняйтесь спрашивать коллег, если увидели незнакомую ситуацию
- больше практикуйтесь. Посадите домашний проект на git и работайте с ним
В следующем уроке мы узнаем, что такое ветки и будем активно работать с ними. Там мы будем активно использовать git push и git pull, и это поможет закрепить уже пройденный материал.
Добрый день! Создал новый репозиторий на git hub. После этого в vs code в терминале ввожу по порядку:
И после этой команды выводится это:
Добавлено через 1 час 46 минут
Разобрался.
Заходим в файл .gitconfig (через блокнот). Проверяем, чтобы имя и почта были правильно написаны.
Далее заходим в диспетчер учетных данных. В общих учетных данных ищем сайт гитхаб. Проверяем чтобы имя пользователя было такое же как логин от гитхаба. А вот вместо пароля нужно вводить сгенерированный токен.
И все окай.
Помощь в написании контрольных, курсовых и дипломных работ здесь
Почему не работает push в git?
Может кто нибудь пжлст подсказать, почему может не работать команда push в git, ничего вообще не.
git push rejected
Создал локальный репозиторий, сделал коммиты. Захотел залить на gitlab - создал репозиторий на.
Git не делает push на сервер
Есть убунта, установил gitlab, создал тестовый проект. add an SSH key - не сделал, т.к. винда на.
Git не могу сделать push
При попытке сделать пуш на гитхаб получаю ошибку: Push failed Failed with error: fatal: Could.
Git push в пустой репозиторий
Здравствуйте! Есть проект, создаю репозиторий без readme Файла. Как закачать в него этот проект.
Error: failed to push some refs (Git)
Попытался выложить свой первый проект на GitHub, но возникает магическая ошибка. Все делал в.
Git add/commit/push не видят файл
В наличие есть файл: .mozconfig. Пустой или с наличием информации. git add/commit/push не видят.
Где в github история всех моих git push комманд с обновленными файлами?
Всем привет Загружая проект на свой github аккаунт я не могу найти а где история всех моих git.
Как принять push в GIT?
Всем добрый день! Сейчас осваиваю GIT и не могу разобраться с одним вопросом. Есть у меня 1.
Я пытаюсь обновить репозиторий Git на GitHub. Я сделал кучу изменений, добавил их, совершил, а затем попытался сделать git push . Ответ говорит мне, что все обновлено, но очевидно, что это не так.
отвечает репозиторием, который я ожидал.
почему Git говорит мне, что репозиторий обновлен, когда есть локальные коммиты, которые не видны в репозитории?
git push не толкает все ваши локальные ветви: как он узнает, какие удаленные ветви их толкать? Он только толкает локальные ветви, которые были настроены для толчка к определенной удаленной ветви.
на моей версии Git (1.6.5.3), когда я запускаю git remote show origin он фактически печатает, какие ветви настроены для push:
Q. но я мог бы нажать на master , не беспокоясь обо всем этом!
когда вы git clone , по умолчанию он устанавливает локальный master ветка, чтобы нажать на пульт master филиал (локально называемый origin/master ), так что если вы совершаете только на master и git push всегда будет толкать свои изменения обратно.
однако, из выходного фрагмента, который вы опубликовали, вы находитесь в ветке под названием develop , который, как я предполагаю,не был настроен ни на что. Так что git push без аргументов не будет нажимать коммиты на этой ветке.
когда он говорит: "Все up-to-date", это означает"все ветви, которые вы сказали мне, как нажать, актуальны".
Q. Итак, как я могу нажать мои коммиты?
если то, что вы хотите сделать, это внести изменения из develop на origin/master , тогда вы можете объединить их в локальную master тогда Нажмите это:
если вы хотите создать develop ветка на пульте, отдельно от master , потом аргументы git push :
это будет: создать новую ветку на пульте под названием develop ; и приведите эту ветку в соответствие с вашим местным develop филиала; и set develop для передачи origin/develop так что в будущем git push без аргументов будет push develop автоматически.
если вы хотите нажать ваш местный develop в удаленную ветку под названием Что-то кроме develop , то вы можете скажи:
однако, что форма не настройка develop всегда нажимать на origin/something-else в будущем; это одноразовая операция.
это произошло со мной, когда мое приложение SourceTree разбилось во время постановки. И в командной строке это выглядело как предыдущее git add были повреждены. Если это так, попробуйте:
по последней команде вам может потребоваться установить ветку.
имейте в виду, что этого достаточно, если вы не сделали ветвления или любого из этого рода. В этом случае, убедитесь, что вы нажимаете на правильную ветку, как git push origin develop .
Репутация: 2
Всего: 2
Сливаю в локальный репозиторий данные, изменяю, отправляю на удалённый (git push) и вижу, что репозиторий изменился, мой коммит видно через git log, но рабочая директория осталась прежней - git status говорит, что есть файлы для коммита. git reset --hard HEAD спасает, но это как-то нелогично после каждого коммита выполнять эту команду. Тем более, что после пуша указатель указывает ровно на последний коммит (т.е. рабочая директория должна быть в соответствии с ним, но она в другом состоянии).
Репутация: 4
Всего: 260
на другом - git pull --rebase
и на этом втором не подтянулись изменения.
я правильно понял?
Репутация: 2
Всего: 2
Всё оказывается намного проще. Элементарный pull -> commit -> push на локальном репозитории вызывает описываемую ситуацию. Еще раз напишу:
- данные пушаются, т.е. история комитов обновляется
- меняется указатель HEAD на последний коммит в указанной ветке
- НО, не менются файлы в рабочей директории
Помогает git reset --hard HEAD или git checkout -f master. Но хотелось бы понять как решить этот вопрос без танцев с бубном.
Репутация: 4
Всего: 260
а что тогда коммитается, если файлы не меняются?
Репутация: 2
Всего: 2
Изменения коммитятся локально.
Затем пушаются.
Затем смотрится история коммитов на удаленной машине и рабочая директория.
Репутация: 4
Всего: 260
а между этими шагами происходит pull на удаленной машине, так?
Репутация: 2
Всего: 2
Репутация: 4
Всего: 260
без этого и не будут файлы сами по себе обновляться.
посуди сам: да, "рабочий каталог" и репозиторий, куда пушаешь — на одной машине. физически. но "рабочий каталог" может быть специально установлен на какой-то старый коммит — что, автоматически обновлять? а с изменениями что? автоматически мерджить?
потому ты на удаленной тоже явно запускаешь pull/rebase, как на любой другой.
Читайте также: