Другие ответы выглядели неполными.
Я попробовал ниже в полном объеме, и он работал нормально.
НОТА:
1. Сделайте копию своего хранилища, прежде чем пытаться сделать это ниже, чтобы быть в безопасности.
Детали:
1. Вся разработка происходит в ветке dev.
2. Ветвь q - это та же самая копия dev.
3. Время от времени код dev должен быть перемещен / переписан в ветку qa
поэтому нам нужно переписать ветку qa из ветки dev
Часть 1:
С помощью приведенных ниже команд старый qa был обновлен до более нового dev:
git checkout dev
git merge -s ours qa
git checkout qa
git merge dev
git push
Автоматический комментарий для последнего нажатия дает ниже:
// Output:
// *<MYNAME> Merge branch 'qa' into dev,*
Этот комментарий выглядит обратным, потому что приведенная выше последовательность также выглядит обратной
Часть 2:
Ниже приведены неожиданные новые локальные коммиты в dev, ненужные,
поэтому нам нужно выбросить и сделать dev нетронутым.
git checkout dev
// Output:
// Switched to branch 'dev'
// Your branch is ahead of 'origin/dev' by 15 commits.
// (use "git push" to publish your local commits)
git reset --hard origin/dev
// Now we threw away the unexpected commits
Часть 3:
Убедитесь, что все как положено:
git status
// Output:
// *On branch dev
// Your branch is up-to-date with 'origin/dev'.
// nothing to commit, working tree clean*
Вот и все.
1. старый qa теперь перезаписывается новым кодом ветки dev
2. local чист (удаленный источник / dev не тронут)