Git push ничего не сделает (все актуально) - PullRequest
89 голосов
/ 30 мая 2010

Я пытаюсь обновить 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)

Ответы [ 14 ]

131 голосов
/ 30 мая 2010

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 в будущем; это однократная операция.

22 голосов
/ 12 сентября 2014

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

13 голосов
/ 30 мая 2010

Попробуйте:

git push --all origin
9 голосов
/ 12 апреля 2017

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

4 голосов
/ 30 мая 2010

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

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

3 голосов
/ 16 мая 2018

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

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.

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

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

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

git push origin develop:some-other-name
2 голосов
/ 08 июня 2017

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

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

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

2 голосов
/ 05 октября 2016

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

Чтобы исправить это, я внес изменения в свое рабочее дерево, зафиксировал, а затем снова нажал. Он работал прекрасно.

1 голос
/ 05 ноября 2018

Я перепробовал много методов, включая определенные здесь. То, что я получил, это

  • Убедитесь, что имя репозитория является действительным. Лучше всего скопировать ссылку с сайта репозитория и вставить в git bash.

  • Убедитесь, что вы зафиксировали выбранные файлы.

    git commit -m "Your commit here"
    
  • Если оба шага не работают, попробуйте

    git push -u -f origin master

1 голос
/ 28 апреля 2018

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

...