Git push нічого не призведе (усе актуально)


100

Я намагаюся оновити сховище 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)

Відповіді:


142

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)

З. Але я міг би наполягати на цьому, masterне хвилюючись про все це!

Коли ви git clone, за замовчуванням, налаштовуєте свою локальну masterгілку, щоб перейти до віддаленої masterгілки (локально називається origin/master), тож якщо ви лише скористаєтеся master, то простий git pushзавжди відштовхує ваші зміни назад.

Однак із вихідного фрагмента, який ви опублікували, ви знаходитесь на гілці develop, яку називають , і я гадаю, не налаштована ні на що. Тож git pushбез аргументів не буде натискати коміти на цю гілку.

Коли в ньому написано "Все актуально", це означає, що "усі гілки, про які ви розповідали, як натиснути, є актуальними".

З. Як я можу запропонувати свої зобов'язання?

Якщо ви хочете зробити, це внести свої зміни 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майбутнє; це операція одним ударом.


Дякую велике, ваше походження git push розвивається: щось інше дало відповідь на запитання, яке я не зміг отримати на деякий час.
Антроїд

1
У моєму випадку git push origin xвсе ще не було налаштування гілки x, яку слід було б перенести в майбутньому. Це було пов’язано з певним проходом у .gitconfig [remote "origin"]розділі, який спричиняв поведінку git.
Раман

27

Це сталося зі мною, коли мій додаток 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.


15

Спробуйте:

git push --all origin

це підштовхує комітети до відокремлення гілок репо, а не від однієї гілки до головного.
Sreedevi J

13

Спробуйте перейти до останнього зобов’язання, а потім виконайте git push origin HEAD:master.


1
Це фактично спрацювало. Чи хотіли б ви пояснити, чому це спрацювало?
Рене Ніффенеггер

Текстово з docs:Push the current branch to the remote ref matching master in the origin repository. This form is convenient to push the current branch without thinking about its local name.
uruapanmexicansong

Працював для мене , як добре
Jerad Rutnam

Я порівняв те, як налаштовано моє репо і все гілки виглядали однаково. Тим НЕ менше, в одній гілці я не міг просто використовувати git push: / Це працює для мене , а також: git push origin HEAD:my_branch_name.
iaforek

6

У моєму випадку жодне інше рішення не працювало. Мені довелося зробити резервну копію нових модифікованих файлів (показано на git status) і запустити git reset --hard. Це дозволило мені узгодитися з віддаленим сервером. Додавання нових модифікованих файлів та запуску

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

Зробив трюк. Я сподіваюся, що це допомагає комусь, як рішення "останнього шансу".


4

Зараз він з’являється, як ви перебуваєте на гілці розвитку. У вас є галузь розвитку за своїм походженням? Якщо ні, спробуйте git push origin develop. git pushпрацюватиме, як тільки він дізнається про розвинену галузь щодо вашого походження.

Під час подальшого читання я б ознайомився зі сторінками git-push man , зокрема, з розділами прикладів.


3

Щоб бути конкретним, якщо ви хочете щось об'єднати в основне, ви можете виконати наведені нижче дії.

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

Завдяки Сем Стоукс. Відповідно до його відповіді, ви можете вирішити проблему різним способом (я використовував цей спосіб). Після оновлення каталогу розробників вам слід повторно його активізувати

git init

Тоді ви можете скористатись і натиснути оновлення для управління


1
Дякую! У моєму випадку введіть: git initі відкрийте нову вкладку команд, введіть:git push origin branch_name
s7ven

2

Це сталося зі мною, коли я ^Cпосеред git pushGitHub. Однак GitHub не показав, що зміни були внесені.

Щоб виправити це, я змінив своє робоче дерево, скористався, а потім знову натиснув. Це спрацювало чудово.



2

Я перепробував багато методів, включаючи визначені тут. Що я отримав -

  • Переконайтесь, що ім’я сховища є дійсним. Найкращий спосіб - скопіювати посилання з сайту сховища та вставити в git bash.

  • Переконайтеся, що ви обрали вибрані файли.

    git commit -m "Your commit here"
    
  • Якщо обидва кроки не спрацюють, спробуйте

    git push -u -f origin master


1

Натомість ви можете спробувати наступне. Вам не доведеться їхати master; Ви можете безпосередньо змусити натиснути зміни з боку своєї філії.

Як було пояснено вище, коли ви робите ребайн, ви змінюєте історію своєї гілки. Як результат, якщо ви спробуєте зробити нормальне git pushпісля ребати, Git відхилить його, оскільки немає прямого шляху від фіксації на сервері до коміту у вашій гілці. Натомість вам потрібно буде скористатися символом -fабо --forceпрапором, щоб сказати Git, що так, ви дійсно знаєте, що ви робите. Роблячи силові натискання, настійно рекомендується встановити налаштування push.defaultконфігурації на просте, що є стандартним для Git 2.0. Щоб переконатися в правильності налаштування, запустіть:

$ git config --global push.default simple

Як тільки це правильно, ви можете просто запустити:

$ git push -f

І перевірте свій запит на тягу. Це слід оновити!

Перейдіть донизу, як перезавантажити запит на отримання додаткової інформації.


0

Також переконайтеся, що ви натискаєте на правильну гілку.


0

Це сталося зі мною одного разу, коли я спробував проштовхнутися з нової гілки, і я git push origin masterнатомість використав . Вам слід:

  • Використання: git push origin your_new_branchякщо ви хочете, щоб ця гілка була занадто віддаленою репо.
  • Ще перегляньте, щоб ваш майстер відділення об'єднав речі, потім натисніть на від майстра до git repo git merge origin master.

Recap: справа тут у тому, що ви повинні перевірити, де ви пропонуєте другий параметр для git merge. Отже, якщо ви перебуваєте в майстер, використовуйте головний параметр як другий параметр, якщо ви перебуваєте в new_branch, використовуйте це як другий параметр, якщо ви хочете зберегти цю гілку у віддаленому репо-іншому, замість цього виберіть другий варіант вище.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.