Другие ответы выглядели неполными.
Я попробовал ниже полностью, и это работало нормально.
Примечание:
1. Сделайте копию своего хранилища, прежде чем пытаться сделать это ниже, чтобы быть в безопасности.
подробности:
1. Вся разработка происходит в ветке dev
2. Ка ветка - это точно такая же копия dev
3. Время от времени код разработчика необходимо переместить / переписать в ветку 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, ненужные
Итак, мы должны выбросить и сделать девочку нетронутой.
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 is clean (удаленный источник / dev не тронут)