拉和推的不同默认远程,同时允许手动指定一个

Different default remote for pull and push, while allowing manually specifying one

我有一个本地 Git 存储库,它有两个遥控器。 originupstream 的一个分支。我在 master 上工作。我想实现这个:

因此将 originupstream 同步的工作流程将简化为

git pull  # from upstream
git push  # to origin

我已经成功地使用一系列 git config 命令的以下结果配置了第一部分:

[branch "master"]
    remote = upstream
    merge = refs/heads/master
    pushRemote = origin

但是,git push 给我这个错误:

fatal: You are pushing to remote 'origin', which is not the upstream of
your current branch 'master', without telling me what to push
to update which remote branch.

有什么想法吗?

虽然不完全符合您的要求,但一个选项是为各种命令定义别名,在您的 .bashrc 文件中:

alias gpull='git pull upstream master'
alias gpush='git push origin master'

然后,就像使用任何普通 UNIX 别名一样使用这些别名。我投票反对尝试更改基本 Git 命令的语义,部分原因是我不知道如何更改,部分原因是它可能会在某些时候导致混淆。

这实际上应该在 Git 版本 >= 2.0 中工作 "out of the box",按照您配置的方式。

显然,根据评论,您还必须将 push.default 显式配置为 simple,即使这是未配置 push.default 的默认设置。 (将 push.default 设置为 current 也可以,但会删除 simple 为某些推送添加的安全检查。)

请注意,您可以使用 git branch --set-upstream-to:

设置任何分支的上游
git branch --set-upstream-to=upstream/master master

但它确实需要一个 git config 命令(或直接编辑配置文件——我自己喜欢经常使用 git config --edit,尤其是修复打字错误)来设置 pushRemote同样,您需要实现您想要实现的目标。