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
филиала; и setdevelop
для передачиorigin/develop
так что в будущемgit push
без аргументов будет pushdevelop
автоматически.если вы хотите, чтобы подтолкнуть ваш местный
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 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
и проверьте ваш запрос на вытягивание. Он должен быть обновлен!
перейти к нижней части как перебазировать запрос на вытягивание дополнительные подробности.