Получение объединенного кода "справа" с помощью 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 в объединенную фиксацию, сделанную ранее.
Тогда конечный результат должен выглядеть так, как вы.