Git puzzler - Working around `denying non-fast-forward`
-
21-12-2019 - |
Question
In my local git repository, I had essentially:
* commit A
|
* commit B (master) (origin/master)
I made some changes so it is now:
* commit A
|\
| * commit B (develop) (origin/master)
|
* commit C (master)
I would like the Git repo (hosted on beanstalkapp.com) to be updated to reflect this, and look like:
* commit A
|\
| * commit B (develop) (origin/develop)
|
* commit C (master) (origin/master)
How can I do this? git push
fails with denying non-fast-forward refs/head/master
. What are my options to work around this?
My repo hasn't been very organized, and I'd like to refactor it once and for all.
Solution
git checkout master
git merge origin/master strategy=ours
git push origin master
The 'ours' strategy ignores all changes made between commit A
and B
, and makes a "fake" merge (a merge in name only). git push
then happily does a fast-forward commit between the old origin/master
and the new master
.
The result:
* commit A
|\
| * commit B (develop)
| |
* | commit C
| /
* commit D, but identical to C (master) (origin/master)
OTHER TIPS
Are you allowed to do a forced push?
Otherwise are you allowed to delete a branch? In that case you can just delete the old branch and push the new one, which is essentially the same as a forced push.