There are two solutions not mentioned already that you can use: use a topic branch or use cherry-picking.
Topic branch solution
In the topic branch solution, you switch to branch 'something', create a branch to fix a bug e.g. 'something-bugfix', merge this branch into 'something' (fixing the bug), then merge this branch into 'experimental'.
$ git checkout -b something-fix something
[edit, commit]
$ git checkout something
$ git merge something-fix
$ git checkout experimental
$ git merge something-fix
[fix conflicts if necessary and commit]
See also Resolving conflicts/dependencies between topic branches early and Never merging back, and perhaps also Committing to a different branch blog posts by Junio C Hamano (git maintainer).
Cherry-picking a bugfix
The cherry-picking solution is useful if you noticed later that the bugfix you created (e.g. on development branch) would be useful also on other branch (e.g. stable branch). In your case you would comit a fix on 'something' branch:
$ git checkout something
[edit, edit, edit]
$ git commit
$ git checkout experimental
Then you noticed that fix you comitted in 'something' branch should be also on 'experimenta' branch. Lets say that this bugfix was commit 'A' (e.g. 'something' if you didn't commit anything on top of 'something', but it might be e.g. 'something~2' or 'c84fb911'):
$ git checkout experimental
$ git cherry-pick A
(you can use --edit
option to git cherry-pick if you want to edit commit message before comitting cherry-picked bugfix).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…