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 85

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.

это обычная практика в модели запроса на вытягивание создать новую локальную ветвь, а затем нажмите эту ветвь на удаленный. Для этого вам нужно указать, где вы хотите нажать ваши изменения на пульте дистанционного управления. Вы можете сделать это, упомянув 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 config параметр, чтобы просто, по умолчанию в Git 2.0. Чтобы убедиться в правильности конфигурации, выполните команду:

$ git config --global push.default simple

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

$ git push -f

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

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

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

git push origin master