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)
23 ответа
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
в будущем; это однократная операция.
Это случилось со мной, когда мое приложение 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 HEAD:master
,
Для моего случая ни одно из других решений не сработало. Я должен был сделать резервную копию новых измененных файлов (показано с git status
) и запустить git reset --hard
, Это позволило мне перестроиться с удаленного сервера. Добавление новых измененных файлов и запуск
git add .
git commit -am "my comment"
git push
Сделал трюк. Я надеюсь, что это поможет кому-то, как решение "последнего шанса".
Прямо сейчас, кажется, что вы находитесь в разработке ветки. У вас есть развивающаяся ветка по вашему происхождению? Если нет, попробуйте git push origin develop
, git push
будет работать, как только узнает о ветке разработки на вашем источнике.
Что касается дальнейшего чтения, я бы посмотрел справочные страницы git-push, в частности, раздел примеров.
Если быть точным, если вы хотите объединить что-то с мастером, вы можете выполнить следующие шаги.
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
Спасибо Сэму Стоуксу. По его ответу вы можете решить проблему другим способом (я так и использовал). После обновления вашего каталога разработки вы должны повторно инициализировать его
git init
Затем вы можете зафиксировать и отправить обновления мастеру
Выполните следующие действия:1)git log2)git remote -v [проверьте, есть ли источник происхождения или нет]
3)[ЕСЛИ НЕТ ПРОИСХОЖДЕНИЯ] git remote add origin yourOriginName например:git remote add origin https://github.com/vikaskumar27071990/RandomCodes.git
4)git status
5)git push -u origin master
(ЕСЛИ ВЫ ПОЛУЧАЕТЕ ОШИБКУ, КАК "master" настроен для отслеживания удаленной ветви "master" от "origin", СЛЕДУЙТЕ НИЖЕ ТОЧКАМ)
6)
git initgit add -A git commit -m 'Исправить плохое репо' git push
По последней команде вам может потребоваться установить ветку.
git push - мастер всех источников
Это случилось со мной. Я просто перенес изменения, а затем это подтолкнуло.
Это случилось со мной, когда я ^C
в середине git push
на GitHub. GitHub не показал, что изменения были сделаны, однако.
Чтобы исправить это, я внес изменения в свое рабочее дерево, зафиксировал, а затем снова нажал. Это работало отлично.
Я перепробовал много методов, включая определенные здесь. Что я получил,
Убедитесь, что имя репозитория является действительным. Лучше всего скопировать ссылку с сайта репозитория и вставить в git bash.
Убедитесь, что вы зафиксировали выбранные файлы.
git commit -m "Your commit here"
Если оба шага не работают, попробуйте
git push -u -f origin master
Это случилось со мной, когда я попытался нажать из новой ветки и использовал git push origin master
вместо. Вам следует либо:
- Использование:
git push origin your_new_branch
если вы хотите, чтобы эта ветка тоже происходила в удаленном репо. - В противном случае проверьте, что ваша основная ветка объединяет вещи, а затем переходит от мастера к репозиторию git с помощью
git merge origin master
.
Резюме: суть в том, что вы должны проверить, где вы предлагаете второй параметр для git merge. Поэтому, если вы находитесь в главном хранилище, используйте master в качестве второго параметра, если вы находитесь в new_branch, используйте его в качестве второго параметра, если вы хотите сохранить эту ветку в удаленном репо, иначе вместо этого выберите второй вариант выше.
если вы добавляете новый проект в github, вы можете использовать следующие шаги:
rm -rf .git/
git init
git remote add origin https://repository.remote.url
git add .
git commit -m “Commit message here”.
git push -f origin 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 --set-upstream origin main
Вы настраиваете, в какую ветку отправляете файлы.
Это может произойти, когда вы находитесь в ветке, отличной от той, которую вы думаете, назовем ее «добавить». Вам нужно вернуться к основному локально и нажать оттуда. Но будьте осторожны, когда вы вернетесь в main, все ваши изменения будут отменены, и вы увидите только код до последнего редактирования вашего локального файла main.
В моем случае мне пришлось удалить все пульты (их было несколько по какой-то необъяснимой причине), снова добавить пульт и зафиксировать с -f.
$ git remote
origin
upstream
$ git remote remove upstream
$ git remote remove origin
$ git remote add origin <my origin>
$ git push -u -f origin main
Я не знаю, если
-u
flag что-то внес, но это тоже не повредит.
Вы уверены, что у вас установлен правильный URL-адрес удаленного источника? Путем выдачи
Это была моя ошибка, я ввел его вручную, и это был неправильный путь.
git commit -m "начальный коммит"
git push происхождение основной
это сработало для меня