! [відхилено] master -> master (спочатку отримати)


101

Чи є хороший спосіб пояснити, як вирішити " ! [rejected] master -> master (fetch first)'" в Git?

Коли я використовую цю команду, $ git push origin masterвона відображає повідомлення про помилку.

! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'git@github.com:zapnaa/abcappp.git'

Відповіді:


132

Відповідь є, git каже вам спершу забрати.

Можливо, хтось ще наполягав на освоєнні, і ваш коміт позаду. Тому вам доведеться отримати, об’єднати набір змін, і тоді ви зможете натиснути ще раз.

Якщо ви цього не зробите (або навіть гірше, якщо ви змусите його скористатися --forceопцією), ви можете зіпсувати історію комітів.

РЕДАГУВАТИ: Я детальніше розповідаю про останній пункт, оскільки хлопець тут щойно дав дуже погані поради щодо використання цієї --forceопції.

Оскільки git - це DVCS, в ідеалі багато інших розробників працюють над тим же проектом, що і ви, використовуючи те саме сховище (або його форк). Якщо ви насильно перезапишете свій набір змін, ваше сховище не відповідатиме іншим людям, оскільки "ви переписали історію". Ви зробите інших людей нещасними, і сховище постраждає. Можливо, кошеня у світі теж заплаче.

TL; DR

  1. Якщо ви хочете вирішити, спочатку завантажте (а потім об’єднайте).
  2. Якщо ви хочете зламати, використовуйте --forceопцію.

Ти все-таки просив про перше. Ідіть за 1) завжди, навіть якщо ви завжди будете використовувати git самі, тому що це хороша практика.


5
Не вдається видалити важливі зміни в локальних файлах?
Леонардо Кастро

2
Це не змінюється після
вибору

@dhein, як я вже писав, за вибором має слідувати злиття - суть в тому, що вам потрібно "вирівняти" локальне дерево з віддаленим деревом (отже, злиттям) - але дякую, я написав це в TL; DR також
linuxbandit

87

спробуйте:

git fetch origin master
git merge origin master

Після написання цього коду я отримав іншу помилку: (не вперед)

Я пишу цей код:

git fetch origin master:tmp
git rebase tmp
git push origin HEAD:master
git branch -D tmp

І вирішив мою проблему


Те саме для мене. Це вирішило мою проблему. Є кілька попереджень. Я переплутав з підрепозиторієм, але вирішив це таким чином: stackoverflow.com/questions/19584255/…
М. Босолей

1
@Aurelio A Ваша команда злиття неправильна, вона повинна бути git merge master.
mike

Чому нам потрібно використовувати git branch -D tmp?
Милош Вељковић

27

Вам слід скористатися git pullкомандою do, git fetchа наступною - git merge.

Якщо ви використовуєте git push origin master --forceкоманду, у вас можуть виникнути проблеми в майбутньому.


1
Чи правильно, що ви повинні використовувати --force лише в тому випадку, якщо ви єдиний у проекті, і вас розчаровує спроба зробити перший поштовх?
chrips

20

pull - це завжди правильний підхід, але один виняток може бути, коли ви намагаєтесь перетворити файлову систему none-Git у сховище Github. Там вам доведеться примусити перший коміт.

git init
git add README.md
git add .
git commit -m "first commit"
git remote add origin https://github.com/userName/repoName.git
git push --force origin master

працює для мене, я знову розпочав новий проект (те саме репо) і хотів його замінити.
ucotta

18

Спробуйте цю команду git

git push origin master --force

або не вистачає сили -f

git push origin master -f


2
Це замінює обмеження git push. Не рекомендується для колективної роботи. З документації git push: якщо хтось інший створив поверх вашої оригінальної історії, поки ви перебазуєте, кінчик гілки на пульті може просунутися з її фіксацією, а сліпе натискання за допомогою --force втратить свою роботу .
Кейсі,

10

Як зазначено в повідомленні про помилку, вам потрібно "завантажити спочатку". Це спрацювало для мене. Використовуйте команду:

  1. git fetch origin master

Потім виконайте такі дії для об’єднання:

  1. git pull origin master
  2. git add .
  3. git commit -m 'your commit message'
  4. git push origin master


3

Ви можете використати таку команду: Спочатку клонуйте свіжу копію вашого репо, використовуючи прапор --mirror:

$ git clone --mirror git://example.com/some-big-repo.git

Потім дотримуйтесь кодів відповідно:

Додавання існуючого проекту до GitHub за допомогою командного рядка

Навіть якщо це не працює, ви можете просто кодувати:

$ git push origin master --force 

або

$ git push origin master -f

3

Виконайте наведені нижче кроки, оскільки у мене теж була та сама проблема:

$ git pull origin master --allow-unrelated-histories 

(Щоб побачити, чи можна локальну гілку легко об’єднати з віддаленою)

$ git push -u origin master 

(Тепер перенесіть весь вміст локального сховища git до вашого онлайн-сховища)


2

Цілком ймовірно, що хтось інший (наприклад, ваш колега) додав коміти origin/master, які відсутні у вашій локальній masterгілці, і ви намагаєтесь перенести деякі коміти з вашої локальної гілки на сервер. У 99% випадків, припускаючи, що ви не хочете стирати їх роботуorigin , у вас є два варіанти:

2) Об’єднайте їх зміни у свою локальну гілку, а потім натисніть об’єднаний результат. git checkout master git pull # resolve conflicts here git push

(Зверніть увагу, що в даному випадку git pullце, по суті, лише a git fetchта a git merge.)

1) Перебазуйте місцеве відділення, щоб було схоже, що ваш колега спочатку зробив свої комісії, а потім ви зробили свої комітети. Це зберігає історію комітів приємною та лінійною - і дозволяє уникнути "коміту злиття". Однак, якщо у вас виникають конфлікти зі змінами колеги, можливо, вам доведеться вирішити ці конфлікти для кожного з ваших комітів (а не лише один раз) у гіршому випадку. По суті, це приємніше для всіх інших, але більше зусиль для вас. git pull --rebase # resolve conflicts here git push

(Зверніть увагу, що git pull --rebaseце, по суті, a git fetchта a git rebase origin/master.)



1

Можливо, ваша помилка пов’язана з гілкою злиття.
Просто дотримуйтесь цього:

крок 1: git pull origin master(якщо ви отримаєте якесь повідомлення, то проігноруйте його)
крок 2: git add .
крок 3: git commit -m 'your commit message'
крок 4:git push origin master


1

Спочатку вам слід скористатися git pull, потім командою do a, git fetchа потім - git merge.

Якщо ви використовуєте git push origin master --forceкоманду, у вас можуть виникнути проблеми в майбутньому.


1

Я подолав це, перевіривши нову гілку, як це:

# git checkout -b newbranch <SHA of master>

# git branch
* newbranch
  master

# git push -u <repo_url_alias> newbranch

У вас залишилось 2 відділення: Master і newbranch, які ви зможете об’єднати пізніше.


0

Вам просто потрібно згадати назву вашої філії разом із вашою віддаленою назвою.

git fetch origin
git merge origin/master

0

Причиною цього сталося у моєму випадку - під час створення посилання на репліка GitHub, я ініціалізував його файлом README

Створюючи віддалений Git, не ініціалізуйте його файлом README, інакше це покаже помилку

Не робіть цього, і це точно буде працювати нормально Натомість ініціалізуйте його файлом readme, якщо хочете після натискання на головну гілку


0

Це працювало для мене, оскільки жодне з інших рішень не працювало для мене. НІ ЧИ СИЛИ!

https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/resolving-a-merge-conflict-using-the-command-line

Просто треба було пройти Git Bash

cd REPOSITORY-NAME
git add .
git commit -m "Resolved merge conflict by incorporating both suggestions."

Потім повернімось до мого cmd, і я міг: git push heroku masterщо в моєму випадку було проблемою.



0

введіть тут опис зображення

! [відхилено] master -> master (спочатку отримати) помилка: не вдалося висунути деякі посилання на 'git@github.com:'

введіть тут опис зображення

Успішно вирішено проблему за допомогою команди --force. отже, ви повинні використовувати
git push origin master --force




-1

Його просто використовувати цю команду:

git push -f master master

і це допоможе зробити вашу роботу


-1

Проблема вирішена

У мене була проблема

! [rejected]        master -> master (non-fast-forward) error: failed to push some refs to 'https://github.com/repo_name/repo-hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g.hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

У мене теж була та сама проблема. Проблема в тому, що ваші роботи commitsв інших сховищах не були успішними, pushedтому вам потрібно виконати такі команди:

  1. git fetch origin master

    вихід: From https://github.com/username/repo-name * branch master -> FETCH_HEAD

  2. git merge origin master

    вихід: Merge made by the 'recursive' strategy. repo-name/ReadMe.md | 1 - 1 file changed, 1 deletion(-)

  3. git push

    вихід: Enumerating objects: 8, done. Counting objects: 100% (8/8), done. Delta compression using up to 8 threads Compressing objects: 100% (6/6), done. Writing objects: 100% (6/6), 1.00 KiB | 1.00 MiB/s, done. Total 6 (delta 2), reused 0 (delta 0) remote: Resolving deltas: 100% (2/2), completed with 1 local object. To https://github.com/user_name/repo-name.git 0852d5vf..70v56d9 master -> master

Дуже дякую

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