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 pull whaaat

В следующем уроке мы узнаем, что такое ветки и будем активно работать с ними. Там мы будем активно использовать 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 push
на другом - 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, как на любой другой.

Читайте также: