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 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 дополнительные подробности.