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.

Was it helpful?

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top