Случайно обединихме клон 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: Извинявам се, ако вече е отговорено на този въпрос, но всъщност не знаех какво да търся. Ако има отговор, моля, насочете ме към него. Благодаря ти.