Прерывание всплывающего окна в Git - PullRequest
217 голосов
/ 15 декабря 2011

Я открыл тайник, и произошел конфликт слияния. В отличие от вопроса, который указан как дубликат, у меня уже были некоторые незафиксированные изменения в каталоге, которые я хотел сохранить. Я не просто хочу, чтобы конфликт слияния исчез, но и чтобы вернуть мой каталог в состояние, в котором он был до появления всплывающего окна.

Я пытался git merge --abort, но git утверждал, что слияние не происходит. Есть ли простой способ прервать всплывающее окно, не разрушая изменения, которые у меня были изначально в каталоге?

Ответы [ 12 ]

0 голосов
/ 15 августа 2018

Я пишу здесь, надеясь, что другие найдут мой ответ полезным.У меня была похожая проблема, когда я пытался сделать сундук в другой ветке, чем та, из которой я спрятал.В моем случае у меня не было файлов, которые были незафиксированы или находятся в индексе, но все же попали в случай конфликтов слияния (тот же случай, что и @pid).Как уже указывали другие, неудачный всплеск git stash действительно сохранил мой stash, затем быстрый сброс git git plus, возвращаясь к моей первоначальной ветке и выполняя оттуда сундук, решил мою проблему.

0 голосов
/ 24 июля 2014

Если до git stash pop не было никаких поэтапных изменений, как в вопросе, то должны работать следующие две команды.

git diff --name-only --cached | xargs git checkout --ours HEAD
git ls-tree stash@{0}^3 --name-only | xargs rm

Первая отменяет любые объединения из тайника, успешно или нет.Второй удаляет все неотслеживаемые файлы, представленные в хранилище.

С man git stash: The working directory must match the index. На что указывает @DavidG, stash pop завершится ошибкой, если конфликтуют какие-либо неподготовленные измененные файлы.Таким образом, нам не нужно беспокоиться о том, чтобы разорвать конфликты слияний, а не вернуться к HEAD.Все оставшиеся измененные файлы затем не связаны с тайником и были изменены до stash pop

. Если произошли поэтапные изменения, мне неясно, можем ли мы полагаться на те же команды, и вы можете попробовать@ Техника Бен Джексона.Предложения приветствуются ..

Вот тестовая установка для всех различных случаев https://gist.github.com/here/4f3af6dafdb4ca15e804

# Result:
# Merge succeeded in m (theirs)
# Conflict in b
# Unstaged in a
# Untracked in c and d

# Goal:
# Reverse changes to successful merge m
# Keep our version in merge conflict b
# Keep our unstaged a
# Keep our untracked d
# Delete stashed untracked c
...