Я предполагаю, что у вас есть два пульта с именами A и B, для которых настроен только URL.Если вы не следуете ссылочным спецификациям, прочитайте соответствующую главу в книге ProGit.
1: извлеките из A после того, как появятся обновления, переведите его в B
$ # pull = fetch + (often fast-forward merge)
$ git fetch A # fetches all objects from A (all branches, commits; everything)
$ git push B 'refs/remotes/A/*:refs/heads/*'
$ # I've quoted so that the shell doesn't try to expand the *
РЕДАКТИРОВАТЬ: Я предположил, что вы не хотите объединять изменения в ваши локальные ветви.
2: Извлечь из A, объединить его с моими локальными файлами, а затем нажмите егона B, сливаясь с репо на B.
$ git pull A # fetch + attempt to merge changes in all branches
$ # Resolve any conflicts here
$ git push B '+refs/heads/*:refs/heads/*' # omit the + if it's a FF push
$ # Default is to push matching branches
EDIT: Выше не объединяет изменения в B. Если вы хотите это сделать, вы должны потянутьтакже изменяет B и объединяет их в свои локальные ветви перед нажатием.
3: Я бы хотел, чтобы все A, мое локальное репо и B имели одинаковые ветви
$ git pull A
$ git checkout branchx
$ git reset --hard A/branchx # Warning! All local changes will be destroyed
$ # Repeat the above for all branches
$ git push B '+refs/heads/*:refs/heads/*' # Warning! Data in B is overwritten
РЕДАКТИРОВАТЬ: Если вы хотите удалить устаревшие ветви отслеживания, запустите
$ git remote prune A
$ git remote prune B