На самом деле ваша первая команда создала так называемую ветвь отслеживания с именем foo, которая будет отслеживать удаленную главную ветвь по ссылке origin / master
Это означает, что теперь у вас есть взаимосвязь между ними, позволяющая вам использовать команды push / pull без параметров
Ваша вторая команда создала ветку foo на удаленной стороне и переопределила отношение, поэтому теперь локальный foo переходит к удаленному foo, но может извлекать напрямую из master. Вы можете увидеть это, выполнив:
git remote show origin
Я не знаю, какова была ваша конечная цель, но я бы порекомендовал использовать подход с чистой веткой тем вместо того, чтобы пытаться связать ветки тем с удаленным мастером.
Так что вместо того, что вы сделали, вам, вероятно, пришлось выполнить:
git checkout -b foo master #create topic branch foo from the current state of local master
git push origin foo #create remote branch foo and setup direct relationship, if you really need to have it on the remote repo, but that's questionable
Поэтому я бы порекомендовал следующий рабочий процесс:
git checkout foo
...commit, commit...
git checkout master
git pull #to update local master in case if there were changes made while you were working on foo
git merge foo # to merge foo changes into master
git push # push local master to remote