Ответ 1
Во-первых, вы должны всегда делать свой PR-формат веткой, а не от master
. master
предназначен для зеркалирования upstream/master
, при этом 'upstream
' является именем исходного репо, которое вы разветвляли.
В вашем случае убедитесь, что upstream
существует, создайте ветвь для ссылки на ваши текущие исправления и reset master
на upstream/master
:
До:
z--z (upstream/master, with new commits)
/
z--y--y--y (master with local patches, origin/master)
Запомните текущую работу:
git checkout master
git checkout -b mybranch
git remote add upstream /url/original/repo
git fetch upstream
# reset master to upstream/master
git checkout master
git reset --hard upstream/master
git push --force
y--y--y (mybranch)
/
z--z--z (master, upstream/master, origin/master)
# replay the patches (even they are rejected for now) on top of master
git checkout mybranch
git rebase master
git push -u origin mybranch
y'--y'--y' (mybranch, origin/mybranch)
/
z--z--z (master, upstream/master, origin/master)
Здесь: git reset --hard upstream/master
будет reset master
HEAD в обновленном upstream/master
, чтобы мастер отражал ту же историю, что и в исходном репо.
Но так как некоторые коммиты, которые ранее выполнялись на master
и нажимали на fork (origin/master
), вам нужно было бы заменить эту историю новым состоянием master
. Следовательно, git push --force
.
Rebasing mybranch позволяет этим текущим исправлениям основываться на самой последней фиксации исходного репо.