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)

13 ответов


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 без аргументов не будет нажимать коммиты на этой ветке.

когда он говорит: "Все up-to-date", это означает"все ветви, которые вы сказали мне, как нажать, актуальны".

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 филиала; и set develop для передачи origin/develop так что в будущем git push без аргументов будет push develop автоматически.

если вы хотите нажать ваш местный develop в удаленную ветку под названием Что-то кроме develop, то вы можете скажи:

git push origin develop:something-else

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


это произошло со мной, когда мое приложение 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.


попробуй:

git push --all origin

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


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

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


чтобы быть конкретным, если вы хотите объединить что-то, чтобы освоить, вы можете выполнить следующие шаги.

git add --all // If you want to stage all changes other options also available
git commit -m "Your commit message"
git push // By default when it clone is sets your origin to master or you would have set sometime with git push -u origin master.

это обычная практика в модели запроса pull create в новую локальную ветвь, а затем нажмите эту ветвь на remote. Для этого вам нужно указать, где вы хотите нажать свои изменения на пульте дистанционного управления. Вы можете сделать это, упомянув remote во время нажатия.

git push origin develop // It will create a remote branch with name "develop".

Если вы хотите создать ветвь, отличную от вашего локального имени ветви, вы можете сделать это с помощью выполнить следующую команду.

git push origin develop:some-other-name

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


Это случилось со мной, когда я ^C в середине git push на GitHub. Однако GitHub не показал, что изменения были внесены.


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

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

сделал свое дело. Я надеюсь, что это поможет кому-то, как решение "последнего шанса".


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

git init

затем вы можете зафиксировать и нажать обновления для master


вместо этого вы можете попробовать следующее. Тебе не обязательно идти в master; вы можете напрямую принудительно нажать изменения из самой ветви.

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

$ git config --global push.default simple

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

$ git push -f

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

перейти к нижней части как перебазировать запрос Pull дополнительные подробности.


Это случилось со мной. Я просто повторил изменения, а потом это подтолкнуло.


git push origin master