Ваша філія випереджає "походження / головний" на 3 коміти


354

Я отримую наступне під час бігу git status

Your branch is ahead of 'origin/master' by 3 commits.

Я читав в іншому дописі про те, як це виправити, запускається, git pull --rebaseале що саме є ребайна, чи втрачу я дані чи це простий спосіб синхронізації з майстром?


19
Я не думаю, що це дублікат ... Це питання задає питання про те, що це означає, тоді як інше питання - як відмовитись від змін.
onionjake

11
Як це було позначено як дублікат стільки людей? Питання очевидно вказує, що людина не хоче втрачати свої зміни. Вони внесли зміни і повідомлення плутають їх. Так зване повторне запитання дозволило б людині втратити свої зміни.
Дерек Грір

4
Я мушу сказати, що вищезазначене питання насправді не є дублікатом цього питання ...
Дейв Кантер

15
@DerekGreer: як це було позначено як дублікат? Тому що більшість людей, які позначають питання як копії, не намагаються насправді прочитати та зрозуміти питання. Якщо є поверхневі подібності, вони перейдуть до висновку, що обидва є однаковими, і це залежить від ОП або інших, хто готовий витратити час, щоб ретельно повторити те, що повинно було бути очевидним в першу чергу, якщо мисливці на дупи насправді дбали про те, щоб звернути увагу.
іконоборство

6
^^^ практика якої вбиває ТАК, ІМО.
Geek Stocks

Відповіді:


766

Ви отримуєте це повідомлення, оскільки ви внесли зміни до свого місцевого господаря, і ви не натискали їх на віддалений. У вас є кілька способів "вирішити" це, і це зазвичай залежить від того, як виглядає ваш робочий процес:

  • У гарному робочому процесі ваша віддалена копія майстра повинна бути хорошою, тоді як ваша локальна копія майстра - лише копія віддаленої. Використовуючи цей робочий процес, ви більше ніколи не отримаєте це повідомлення.
  • Якщо ви працюєте по-іншому, і ваші місцеві зміни слід підштовхнути, тоді просто git push originприпускаючи, що походження є вашим віддаленим
  • Якщо ваші локальні зміни погані, просто видаліть їх або поверніть місцевого господаря до стану на дистанційному git reset --hard origin/master

82
git reset - жорстке походження / майстер - саме те, що я шукав. Дякую.
FluxEngine

4
@iberbeu ти вирішив мій день ... git reset - жорстке походження / майстер - це те, що я шукаю. + 1ed
Раві

75
Також fwiw git diff master origin/master(тобто git diff local remote), щоб побачити зміни, які ви будете видаляти
Shanimal

1
У мене є локальний / master на віддаленому походження / гілці, тому використання git push origin master:branchякого повернулося Everything up-to-date, після чого повідомлення про те, що випереджати x commits, відійшло.
fyrye

2
Останній дістав мені те, що мені там потрібно!
RyanG

38

Немає чого виправити. Ви просто зробили 3 коміти та ще не перемістили їх у віддалену гілку. Існує кілька варіантів, залежно від того, що ви хочете зробити:

  • git push: перемістіть свої зміни до віддаленого (це може бути відхилено, якщо на пульті вже є інші зміни)
  • нічого не робити і тримати кодування, синхронізувати ще один день
  • git pull: дістаньте зміни (якщо такі є) з пульта та об'єднайте їх у свої зміни
  • git pull --rebase: як вище, але спробуйте повторити свої зобов’язання поверх віддалених змін

Ви перебуваєте в класичній ситуації (хоча зазвичай ви не доклали б великого рахунку в більшості робочих процесів). Ось що я б зазвичай робив: Перегляньте зміни. Можливо, зробити, git rebase --interactiveщоб зробити на них деякі косметичні засоби, скинути ті, що смокчуть, переупорядкувати їх, щоб зробити їх більш логічними. Тепер перемістіть їх на пульт за допомогою git push. Якщо це буде відхилено, оскільки мій локальний відділ не оновлений: git pull --rebaseповторити свою роботу на основі останніх змін і git pushзнову.


Я використав git pull --rebase, але тепер це говорить про те, що я випереджую одну
команду

Тож я вніс зміни, підштовхнувся до майстра, і тоді наша команда привела до майстра. Тож зміни там мені просто потрібно синхронізувати з поточним майстром.
FluxEngine

@MartyMcFly Важко зрозуміти, що тут відбувається. Ви кажете, що вже штовхнули? То чому ти все ще вчиняєш, що не є господарем? Що ви маєте на увазі під your team lead merged to master? Ти не сказав, що ти вже підштовхнувся до майстра? Що містить додатковий комітет? Спробуйте git diff origin/masterпобачити, чим відрізняється ваша локальна філія від віддаленої.
pmr

1
дякую за допомогу, вибачте, якщо я погано працював, роз'яснюючи ситуацію. Але те, що я шукав, це скидання git - жорстке походження / майстер. Але ваша відповідь була корисною +1.
FluxEngine

Я, здається, застряг між скелею і важким місцем, я намагався вносити зміни, а потім git сказав: ви попереду 11 команд. Мені заборонено оновлювати віддалене сховище, тому натискання неможливо. "git pull" говорить: Уже оновлено. Тож я спробував вашу третю пропозицію, але потім git каже: не можна витягнути заново: ви не змінили зміни. будь ласка, скопіюйте їх або схойте їх. Ду, ось як я потрапив сюди в першу чергу :-(
Сандер де Йонг

36

Використовуйте ці 4 прості команди

Крок 1 :git checkout <branch_name>

Це очевидно, щоб перейти до тієї галузі.

Крок 2 :git pull -s recursive -X theirs

Візьміть віддалені зміни у відділеннях та замініть їх зміни, якщо виник конфлікт. У цьому випадку, якщо ви git statusотримаєте щось подібне, ваша філія випередить "походження / головний" на 3 коміти.

Крок 3 :git reset --hard origin/<branch_name>

Крок 4 :git fetch

Важкий скидання своєї філії.

Насолоджуйтесь.


17

Я зіткнувся з цією проблемою після того, як я об'єднав запит на тягу на Bitbucket.

Треба було робити

git fetch

і це було все.


2
Я працював з репо з пакету і зміг позбутися повідомлення, застосувавши "git fetch" до поточного пакету. tnx!
Мартін Мізер

Під час оформлення замовлення лише для читання мій статус git показав, що я на 2 комітки попереду, журнал виглядав як слід - все фіксує походження. Я зробив git тягнути і був на 5 комірок вперед .. WTF ???? Просто потрібно було оновити локальні індекси ... все добре :)
Кріс Ратлідж

12

Зазвичай, якщо мені доведеться перевірити, які саме комітети відрізняються від майстра, який я виконую:

git rebase -i origin/master

Таким чином я можу побачити коміти і вирішити відмовитись або вибрати ...


Ця низька відповідь аж донизу була те, що мені потрібно було зробити. Я не міг зрозуміти, як дізнатися різницю, і всі мої різні git diff ...маги не спрацювали. Коли я це робив, це вважало мене noopєдиним зобов'язанням, і коли я прийняв це, тепер моя гілка синхронізована з походженням / господарем. Отож, здається, що комітети відрізняються від походження / головного, насправді нічого.
philo vivero

11

Це повідомлення gitозначає, що ви зробили три комісії у вашому місцевому репо-репортажі та не опублікували їх у masterсховищі. Команда для запуску для цього є git push {local branch name} {remote branch name}.

Команда git pullgit pull --rebase) стосується іншої ситуації, коли на віддаленому РЕПО є коміти, яких у вас немає у вашому локальному репо. Цей --rebaseпараметр означає, що gitваш місцевий комітет перемістить убік, синхронізуватиметься з віддаленим репо, а потім спробує застосувати ваші три комісії з нового стану. Якщо конфлікт може виникнути, він може вийти з ладу, але тоді вам буде запропоновано їх вирішити. Ви також можете скасувати це, rebaseякщо не знаєте, як вирішити конфлікти за допомогою, git rebase --abortі ви повернетеся до стану перед запуском git pull --rebase.


7

Якщо ваш git говорить про те, що ви дотримуєтеся попереду, тоді просто спочатку,

git push походження

Щоб переконатися, що ви відтіснили всі ур останні роботи в репо

Тоді,

git reset - жорстке походження / майстер

Для скидання та співпадіння з репо


4

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

Я просто повинен був зробити:

git fetch

Моя проблема була вирішена. Я сподіваюся, що це допомагає !!!


0
$ git fetch

  - remote: Enumerating objects: 3, done.
  - remote: Counting objects: 100% (3/3), done.
  - remote: Compressing objects: 100% (3/3), done.
  - remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0


$ git pull 

   - Already up to date!
   - Merge made by the 'recursive' strategy.

нарешті:

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