Git Push to remote е отхвърлен поради изоставяне на промяната

Изправен съм пред този проблем в Gerrit, Git.

  1. Направих промени (branch-ONE) и натиснах gerrit (да речем промяна Id-240) от eclipse. Но не и обединени.
  2. След това създадох още един клон (branch-TWO) и ангажирах промените, без да променям предишния комит. Така че имам нов идентификатор на промяна на gerrit (да речем, промяна на id-241).
  3. След това изоставих промяната Id 240.
  4. Сега, когато се опитвам да натисна промените си от branch-TWO, той казва, че дистанционното е отхвърлено, тъй като се опитва да натисне changeid 240 вместо 241. Защо?

Това, което опитах...

След като прочетох в интернет възможните решения, направих HARD reset и моите промени на changeId-241 изчезнаха. Все пак си го върнах от reflog. Но в момента, когато се опитам да проверя Out branch-ONE (да направя HARD Reset), моите промени на changeId-241 изчезват.

Опитвам се да следвам това - Git merge pending due to abandoned commit


person Shwet    schedule 01.08.2018    source източник


Отговори (2)


Невъзможно е да се знае със сигурност какво сте направили, но изглежда, че имате нещо подобно:

BASE --- COMMIT-1              <= branch-1
                \
                 \--- COMMIT-2 <= branch-2

COMMIT-2 на клон-2 зависи от COMMIT-1 на клон-1, така че когато натискате COMMIT-2 към Gerrit автоматично, вие също натискате COMMIT-1. Gerrit ще отхвърли COMMIT-1, защото промяна 240 е изоставена.

Вместо това трябваше да работите паралелно, както следва:

BASE --- COMMIT-1 <= branch-1
   \
    \--- COMMIT-2 <= branch-2

По този начин COMMIT-2 няма да зависи от COMMIT-1, така че можете да промените ангажиментите според нуждите си и да изпратите/изоставите техните промени в Gerrit, както искате.

person Marcelo Ávila de Oliveira    schedule 01.08.2018

Ако искате да натиснете и двете промени за преглед, след това или възстановете изоставената промяна и опитайте да натиснете отново, или като използвате командата rebase с интерактивна опция (git rebase -i HEAD~2) актуализирайте съобщението за ангажиране на изоставена промяна, премахнете " Change ID" от съобщението за ангажиране, така че gerrit да не се опитва да качи нов набор от корекции към изоставена промяна, а ще качи нова промяна.

Ако искате да качите само най-новия комит, тогава използвайте същата команда rebase, премахнете изоставената промяна от вашето локално репо.

git rebase -i HEAD~2
person mrutyunjay    schedule 01.08.2018