Git push ничего не сделает (все обновлено)

Я пытаюсь обновить репозиторий git в github. Я сделал кучу изменений, добавил их, затем сделал попытку сделать git push. Ответ говорит мне, что все в актуальном состоянии, но это явно не так.

git remote show origin 

отвечает репозиторием, который я ожидаю.

Почему git говорит мне, что репозиторий обновлен, когда есть локальные коммиты, которые не видны в репозитории?

  [searchgraph]  git status
# On branch develop
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       Capfile
#       config/deploy.rb
nothing added to commit but untracked files present (use "git add" to track)

  [searchgraph]  git add .

  [searchgraph]  git status
# On branch develop
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       new file:   Capfile
#       new file:   config/deploy.rb
#

  [searchgraph]  git commit -m "Added Capistrano deployment"
[develop 12e8af7] Added Capistrano deployment
 2 files changed, 26 insertions(+), 0 deletions(-)
 create mode 100644 Capfile
 create mode 100644 config/deploy.rb

  [searchgraph]  git push
Everything up-to-date

  [searchgraph]  git status
# On branch develop
nothing to commit (working directory clean)

Ответы

Ответ 1

git push не толкает все ваши локальные ветки: как он узнает, к каким удаленным ветким их подталкивать? Он только толкает локальные ветки, которые были настроены для нажатия на конкретную удаленную ветвь.

В моей версии git (1.6.5.3), когда я запускаю git remote show origin, он фактически распечатывает, какие ветки настроены для push:

Local refs configured for 'git push':
  master pushes to master (up to date)
  quux   pushes to quux   (fast forwardable)

Q. Но я мог бы нажать на master, не беспокоясь обо всем этом!

Когда вы git clone, по умолчанию он устанавливает локальную ветвь master для перехода к удаленной ветке master (локально называемой origin/master), поэтому, если вы выполняете транзакцию только на master, тогда простой git push всегда будет возвращать ваши изменения.

Однако из выведенного фрагмента вывода вы находитесь в ветки с именем develop, которая, как я предполагаю, не была настроена на то, чтобы нажать на что-либо. Таким образом, git push без аргументов не будет нажимать на эту ветвь.

Когда в нем говорится "Все актуальное", это означает "все ветки, которые вы мне сказали, как нажимать, обновлены".

Q. Итак, как я могу нажать свои коммиты?

Если то, что вы хотите сделать, это поместить ваши изменения с develop в origin/master, то вы должны, вероятно, объединить их в свой локальный master, а затем нажать на это:

git checkout master
git merge develop
git push             # will push 'master'

Если вы хотите создать ветвь develop на пульте дистанционного управления, отделите ее от master, затем подайте аргументы на git push:

git push origin develop

Это будет: создать новую ветку на удаленном телефоне под названием develop; и довести эту ветвь до вашего локального ветки develop; и установите develop, чтобы нажать origin/develop, чтобы в будущем git push без аргументов автоматически нажмите develop.

Если вы хотите нажать локальную develop на удаленную ветку, называемую чем-то отличным от develop, вы можете сказать:

git push origin develop:something-else

Однако, эта форма не будет настраивать develop, чтобы всегда нажимать на origin/something-else в будущем; это одноразовая операция.

Ответ 2

Это случилось со мной, когда мое приложение Sourcetree разбилось во время постановки. И в командной строке казалось, что предыдущий git add был поврежден. Если это так, попробуйте:

git init
git add -A
git commit -m 'Fix bad repo'
git push

Или последняя команда, вам может понадобиться установить ветку.

git push --all origin master

Имейте в виду, что этого достаточно, если вы не сделали никакого ветвления или какого-либо подобного рода. В этом случае убедитесь, что вы нажимаете на правильную ветку, например git push origin develop

Ответ 3

Try:

git push --all origin

Ответ 4

Сейчас, кажется, вы находитесь на ветке разработки. У вас есть ветка развития по своему происхождению? Если нет, попробуйте git push origin develop. git push будет работать после того, как он узнает о развитии ветки по вашему происхождению.

В качестве дальнейшего чтения я бы посмотрел git -push man pages, в частности раздел примеров.

Ответ 5

Попробуйте перейти к последнему фиксации, а затем git push origin HEAD:master

Ответ 6

Также убедитесь, что вы надавили на правильную ветку.

Ответ 7

Это случилось со мной, когда я ^C в середине нажатия git на github. Однако Гитуб не показал, что изменения были сделаны. Чтобы исправить это, я внес изменения в свое рабочее дерево, зафиксировал его и снова нажал. Он работал отлично.

Ответ 8

В моем случае ни один из других решений не работал. Мне пришлось сделать резервную копию новых измененных файлов (показано с помощью git status) и запустить git reset --hard. Это позволило мне перестраиваться с удаленного сервера. Добавление новых измененных файлов и запуск

git add .
git commit -am "my comment"
git push

Сделал трюк. Надеюсь, это поможет кому-то, как "последнему шансу" решения.

Ответ 9

Благодаря Сэму Стоуксу. Согласно его ответу, вы можете решить проблему по-другому (я использовал этот путь). После обновления вашего каталога разработки вы должны его повторно инициализировать.

git init

Затем вы можете совершать и нажимать обновления для мастера

Ответ 10

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

Как объяснялось выше, когда вы делаете rebase, вы меняете историю в своей ветке. В результате, если вы попытаетесь выполнить нормальный git push после rebase, Git отклонит его, потому что нет прямого пути от фиксации на сервере к фиксации в вашей ветке. Вместо этого вам нужно использовать флаг -f или --force, чтобы сообщить Git, что да, вы действительно знаете, что делаете. При принудительном нажатии настоятельно рекомендуется установить для параметра push.default config значение simple, которое по умолчанию используется в Git 2.0. Чтобы убедиться, что ваш конфиг правильный, запустите:

$ git config --global push.default simple

Как только это будет правильно, вы можете просто запустить:

$ git push -f

И проверьте ваш запрос на тяну. Он должен быть обновлен!

Внизу LINK для более подробной информации.

Ответ 11

git push origin master