Q:

Why is "git pull origin feature-12345 master" the only way to update my pull request branch? 

I'm working with a pull request on BitBucket, which has been open for a fairly long time (several weeks, while master continues to progress rapidly), and where I'm not the only person making commits to the PR.  I also need to keep the PR in sync with master.  Because there are multiple people working on the branch (and because it feels dirty), doing a rebase and then git push --force is not a great option. 
The only thing that I've found actually works, in this case, is the following:
git checkout master
git pull origin master
git checkout -b feature-12345 origin/feature-12345
git pull origin feature-12345 master
git push origin feature-12345

The key line above is git pull origin feature-12345 master, which results in a commit with the message:
Merge branches 'feature-12345' and 'master' of ssh://mybitbucketserver/ABC/xyz into feature-12345

After doing this, BitBucket shows a nice "merge" commit in the "commits" list for the PR, instead of flooding the commit history with recent commits from master. 
I'm happy that I've worked out how to do this, but my question is: why do I need to use that specific command, to make it merge in this way?  If I try (while on the feature-12345 branch):
git pull origin master

And then push, it floods my commit history. 
Same if I do this (which I would have thought would be 100% equivalent to the merge part of git pull origin feature-12345 master, but it seems not):
git merge feature-12345 master

What's so special about git pull origin feature-12345 master? 

A:

git pull is nothing more than a fetch followed by a merge. 
git pull feature-12345 master updates your remote branches origin/feature-12345 and origin/master, then it merges both of these into your current HEAD. 
I'm not sure why git pull origin master makes bitbucket show the whole history of master, my guess is that it gets confused by the merge branch being a remote branch (origin/master, compared to just master), or possibly because you merge two branches (origin/master and origin/feature-12345) into a third one (feature-12345)
Let me suggest to first get your master up-to-date, merge locally to you branch, then push the resulting branch:
git checkout master
git pull origin master # keep your master branch up to date
git checkout feature-12345
git merge master # to get new features from master, resolve conflicts...
git push origin feature-12345 # push the merge commit to bitbucket

