Получение объединенного кода "справа" с помощью Git

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

Мой журнал git (созданный с помощью l2 *) выглядит следующим образом:

*    3f6308d - (HEAD, master) Merging changes (confliect in PriceListForm.java.. was a formatting change only (Sun Dec 29 09:07:27 2013) <Gre
|\  
| *  283c00c - Changing wv reports to be separated by changes in prices according to received_date rather than lab_number. (Thu Dec 26 19:39:
| |
| *  4846bf2 - Merge branch 'master' of ssh://[email protected]/pcs.git (Wed Dec 25 17:49:19 2013) <jpjones>

Когда я выполнил слияние, в этих файлах не было конфликтов, оно просто заменило мои изменения вместо менее недавних изменений jpjones.

В основном я хочу повторить 3f6308d, но разрешить изменения jpjones иметь приоритет. qaru.site/info/494/..., похоже, имеет отношение к тому, чего я хочу достичь, но я не уверен и надеялся на некоторое разъяснение.

* git l2 is alias l2 = log --graph --all --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cd) %C(bold blue)<%an>%Creset' --abbrev-commit --date=local

Ответы

Ответ 1

Учитывая, что вы еще не нажали свою ошибку, вы можете безопасно reset ваш HEAD для фиксации до:

git reset --hard HEAD^

(Убедитесь, что у вас нет текущей работы, например, личные файлы или файлы, добавленные в индекс, потому что как рабочее дерево, так и индекс будут reset в состоянии HEAD^)

Вот что предлагает ответ, о котором вы говорите.

Но после этого вам нужно убедиться, что изменения вашего коллеги сделаны во время слияния, которое вы собираетесь сделать снова.
Посмотрите, работает ли theirs" стратегия слияния.

git checkout yourBranch
git merge -X theirs theirBranch

Однако я подозреваю, что он будет работать только для разрешения конфликтов (одновременные изменения в файле).
Если вы сделали более свежие изменения, они все равно будут в объединенной HEAD.

Если это так, попробуйте следовать рецепту в этом ответе, который заставляет слияние к вашей ветке, а затем reset yourBranch до theirBranch, прежде чем перемещать HEAD в объединенную фиксацию, сделанную ранее.
Тогда конечный результат должен выглядеть так, как вы.