webBG - програмисти, машинно обучение, javascript, python, php, питам, говорим, публикации

Git връщането на ангажимента за сливане причинява проблеми, когато сливането действително е извършено.

Случайно обединихме клон XYZ в DEV и го преместихме в първоначалното репо. Това беше направено с --no-ff за създаване на отделен ангажимент за сливане. Веднага щом разбрах грешното сливане, направих git revert, за да създам ангажимент за връщане и го избутах. Всичко беше добре и имаше много радост...

Докато не се опитахме да обединим XYZ в dev завинаги. Първоначалното объркване беше причинено от факта, че много файлове, които бяха добавени към XYZ, не бяха намерени в обединения клон за разработка. Тогава разбрах, че клонът DEV има ангажимент за връщане, който изтри всички файлове, които бяха добавени към XYZ и впоследствие към DEV поради сливането.

Ето опростената верига от събития:

$ git checkout dev
$ git branch xyz
$ git checkout xyz
$ git add files/foo.xyz
$ git commit -m "blargh"

тук се случва случайното сливане:

$ git checkout dev
$ git merged xyz
$ git push origin dev

и ето ме, опитвайки се да спася положението:

$ git revert <SHA>
$ git push

върнете ангажимента на място, всички са доволни

... more work happens ...

тогава най-накрая е време да обединим xyz завинаги:

$ git checkout xyz
$ ls files/foo.xyz
files/foo.xyz
$ git checkout dev
$ git merge xyz
$ ls files/foo.xyz
File not found

Та въпросите ми са:

а) Какъв е добър начин за връщане назад на ангажименти, особено ако те са били изтласкани към други репо? git revert изглеждаше правилното нещо, но след проблемите със сливането вече не съм толкова сигурен...

b) Ако приемем, че git revert е правилният начин да го направите, как да се справите с горния сценарий на сливане?

PS: Извинявам се, ако вече е отговорено на този въпрос, но всъщност не знаех какво да търся. Ако има отговор, моля, насочете ме към него. Благодаря ти.

git
14.09.2011

Отговори:


1

а) Какъв е добър начин за връщане назад на ангажименти, особено ако те са били изтласкани към други репо? git revert изглеждаше правилното нещо, но след проблемите със сливането вече не съм толкова сигурен...

Ако вече сте споделили обединената версия с други разработчици, които може да са изтеглили тази версия, вие сте напълно прави, че git revertкомитът за сливане е правилното нещо, което трябва да направите.

b) Ако приемем, че git revert е правилният начин да го направите, как да се справите с горния сценарий на сливане?

Това всъщност е класически проблем в git. Добър (но неочевиден!) начин за справяне с този проблем е предложен (и добре обяснен) в тази публикация от блога на Pro Git - идеята, накратко, е да върнете ангажимента за връщане преди отново да се слеете в клона.

Актуализация: има и друго обсъждане на същия проблем от Linux Torvalds, което също може да бъде полезно.

14.09.2011
  • Благодаря ви за отговора. Ще проверя линковете. 14.09.2011
  • Линковете са точно това, което търсих. Благодаря ти! 15.09.2011
  • първата връзка е повредена: Преместено! Техническо съдържание, което преди това беше намерено в блог секцията на този сайт, е интегрирано във второто издание на книгата Pro Git. 11.10.2018
  • Нови материали

    Записване на грешки — Как да записвате грешки във вашето приложение, за да ги отстраните по-късно
    Записването на грешки е важна част от „обработването на грешки“. Накратко, когато възникнат определени грешки в програмите, вие искате да знаете за това. Това е особено важно при грешки. Ти..

    Кратко въведение в теорията на графите
    Кратко въведение в теорията на графите Втора част: внедряване на python на пълни графики В моята предишна статия въведох три основни концепции за графите: върхове, ръбове и тегла. В тази..

    Днес ще пиша за машинно обучение. Смятам се за ентусиаст, а не за експерт, така че имайте това предвид. С това казано, искам...
    Днес ще пиша за машинно обучение. Смятам се за ентусиаст, а не за експерт, така че имайте това предвид. С това казано искам да обясня защо машинното обучение има значение. За да бъда съвсем..

    Какво е структурно типизиране и как Typescript го използва в своя полза?
    Всички знаят тези дни, че „Typescript е строго синтактично надмножество на JavaScript и добавя незадължително статично въвеждане към езика.“. Но какво всъщност означава? Защо миграцията от..

    3 начина за премахване на дубликати от масив в Javascript
    Вие сте уеб разработчик? Програмист ли си? Тогава ще сте запознати с JavaScript и различните му вградени функции, методи и т.н. за различни реализации, проблеми и цели. Един от тези широко..

    Архитектура и обучение на конволюционни невронни мрежи (7 точки):
    Тази публикация предоставя подробности за архитектурата на Конволюционната невронна мрежа (CNN), функциите и обучението на всеки слой, завършвайки с резюме на обучението на CNN...

    Създайте разширение за Chrome с помощта на Angular
    Този урок е базиран на манифеста на разширението на chrome версия 3 (MV3), а също и на Angular версия 2+ (2, 3 и...). Ако не сте използвали манифест версия 3, можете да следвате този урок ,..