Самый простой способ исправить это обычно, как Code_Ninja предложил , использовать git cherry-pick
для повторной фиксации ваших изменений. Обычно метод, рекомендованный Venkataraman R , не работает, потому что Git скажет вам, что объединять нечего. (Если это работает, это тоже нормально.) Точные детали зависят от ситуации. Для потомков давайте рассмотрим наиболее распространенный способ, которым это происходит.
Кто-то получил конфликт слияния, и во время слияния он потерял все мои изменения.
Это очень легко сделать для "кого-то". Давайте дадим «кому-то» имя; давайте назовем его Карл Беспечный. Карл бежит:
git merge carls-feature
или, возможно, даже:
git pull
(хотя я рекомендую любому новичку, например, здесь, Карлу, избегать git pull
- лучше, если он запустит git merge
напрямую, чтобы он мог понять, что он делает).
В любом случае, Карл теперь видит это:
Auto-merging somefile.ext
CONFLICT (content): Merge conflict in somefile.ext
Бедный Карл паникует, ищет в Интернете (возможно, даже StackOverflow) советы, а не смотрит, скажем, Как разрешить конфликты слияния в Git , 1 Карл просто запускается :
git checkout --ours somefile.ext
git add somefile.ext
git commit
Карл только что уничтожил твою работу!
Помните, цель объединения - объединить работы. Git попытается сделать это самостоятельно, но иногда Git не может завершить процесс самостоятельно. В этих случаях Git останавливается и получает помощь от оператора-человека.
Этот человек-оператор - вы , если вы тот, кто находится в конфликте слияния! - полностью, на 100% контролирует результат слияния. Git поверит вам , даже если вы скажете ему, что правильный результат - полностью игнорировать работу другого парня и просто принять вашу версию.
(Обратите внимание, что даже если Git считает, что он правильно объединил изменения двух людей, Git не всегда понимает это правильно. Это все же ваша ответственность за проверку того, что Git понял все правильно. Это хорошая идея у вас есть какая-то система тестирования, которую вы можете использовать. Git просто следует простым правилам объединения текста, которые во многих случаях работают очень хорошо.)
1 В принятом ответе рекомендуется использовать git mergetool
с vimdiff
в качестве инструмента. Мне не нравится git mergetool
, и я рекомендую прочитать другие ответы и поэкспериментировать, чтобы найти то, что подходит вам лучше всего. Но если git mergetool
хорошо работает для вас, это нормально. Обратите внимание, что git mergetool
может использовать другие инструменты слияния, кроме vimdiff
; если у вас есть инструмент слияния, который вы предпочитаете, git mergetool
, скорее всего, сможет его запустить. В книге Pro Git есть дополнительные советы, включая главу по расширенному слиянию.