Как отменить применение тайника с конфликтом?

Я видел вопрос Как отменить применение тайника?, заданный Пэт Нотц. И я пробовал утвержденный ответ, но получаю такую ​​ошибку,

sudo git stash show -p | git apply --reverse
    error: patch failed: app/controllers/CloudController.php:673
    error: app/controllers/CloudController.php: patch does not apply
    error: patch failed: app/controllers/CloudGcode.php:1
    error: app/controllers/CloudGcode.php: patch does not apply

Я должен объяснить, как я бегу в этой ситуации. У меня есть тайники в моем списке тайников, и мне нужно внести некоторые изменения в свой рабочий репозиторий. Изменения в моем рабочем репозитории конфликтуют с тайником @ {0}. Затем я по ошибке выполняю команды git add . и sudo git stash apply, и он показывает эту информацию,

sudo git stash apply
[sudo] password for xxxx:
    Auto-merging app/controllers/CloudGcode.php
    CONFLICT (add/add): Merge conflict in app/controllers/CloudGcode.php
    Auto-merging app/controllers/CloudController.php
    CONFLICT (content): Merge conflict in app/controllers/CloudController.php

После применения тайника в моем файле возникает конфликт, подобный этому,

<<<<<<< Updated upstream
            for($i = 0; $i < $textlen; $i++)
            {
                $char = $uchars[$index++];
                if($char !== 0)
                    $text = $text.chr($char);
            }
            $this->text = $text;
Log::info('LLLLLLLLLLLLLLLLLLLL'.$text);
=======
            for($i = 0; $i < $this->textlen; $i++)
                $text = $text.$uchars[$index++];
            $this->text = $text;
            $this->text[$this->textlen] = 0; // Terminate string overwriting checksum
>>>>>>> Stashed changes
            $this->waitUntilAllCommandsAreParsed = true; // Don't destroy string until executed
        }
        $this->formatErrors = 0;
        return true;
    }
<<<<<<< Updated upstream
=======

Затем я гулю, как это исправить. У меня возникает вопрос Как отменить применение тайника?, который задает Пэт Нотц и попробовал решить этот вопрос. Я хочу знать, есть ли способ вернуть состояние перед выполнением sudo git stash apply, сразу после или перед выполнением git add .


person LF00    schedule 21.07.2016    source источник


Ответы (1)


Вам следует просто повторно спрятать, а затем git reset (или даже git reset --hard, если вы сперва спрятали), как указано в «Прерывание git stash apply < / а> ".

Если вы выполните reset --hard без предварительного запаивания, вы все равно сможете увидеть свой патч в .git/refs/stash, как описано в разделе «Отменить git reset --hard после git stash pop "(git stash apply в любом случае не удалит патч из тайника, как это делает git stash pop, поэтому здесь вам не о чем беспокоиться) или вы можете восстановить его с git fsck.

Я хочу откатить состояние перед выполнением sudo git stash apply

Поскольку git apply --reverse не работает, лучше вернуться в HEAD, как я предлагаю выше, и повторить свои операции.

person VonC    schedule 22.08.2016
comment
Я хочу вернуть состояние перед выполнением sudo git stash apply сразу после или до выполнения git add ., а не HEAD. - person LF00; 26.08.2016
comment
@KrisRoofe Проще вернуться к HEAD и начать здесь. - person VonC; 26.08.2016
comment
если вернуться к HEAD, то изменения между HEAD и git add. будет потеряно. - person LF00; 26.08.2016
comment
@KrisRoofe Нет, если ты сперва их спрятаешь. Или вы можете просто сделать еще один клон и git --work-tree=/path/to/current/mangled/clone add -p ., добавив обратно только те части, которые вам нужны. - person VonC; 26.08.2016
comment
Обидно, я их не припрятал. - person LF00; 26.08.2016
comment
@KrisRoofe Может быть, тогда git fsck может помочь? (stackoverflow.com/a/1109433/6309) - person VonC; 26.08.2016
comment
кажется сделать. Я просто попробую. Спасибо за ваше время и понимание. - person LF00; 26.08.2016
comment
@KrisRoofe Конечно, дайте нам (читателям) знать здесь, если вы вернете свои данные. - person VonC; 26.08.2016