git rebase --committer-date-is-author-date --preserve-merges --onto A* A C
git rebase --committer-date-is-author-date --preserve-merges --onto A* A B
This should keep the common commits having the same sha1 and any merges preserved. Preserve merges is not required in this case, but will become an issue with a less trivial history.
To do this for all branches that contain A in their history do:
git branch --contains A | xargs -n 1 git rebase --committer-date-is-author-date --preserve-merges --onto A* A
Hope this helps.
UPDATE:
This may be cleaner syntax:
for branch in $(git branch --contains A); do git rebase --committer-date-is-author-date --preserve-merges --onto A* A $branch; done