Git分支试图推送到master。

Git分支试图推送到master。,git,git-branch,git-push,Git,Git Branch,Git Push,我不知道我改变了什么,但最近当我尝试使用“git push”向上推我的一个分支时,它试图推到远程分支和主分支 ➜ module1 git:(my-branch) git push Counting objects: 40, done. Delta compression using up to 8 threads. Compressing objects: 100% (25/25), done. Writing objects: 100% (40/40), 3.68 KiB | 0 byte

我不知道我改变了什么,但最近当我尝试使用“git push”向上推我的一个分支时,它试图推到远程分支和主分支

➜  module1 git:(my-branch) git push 
Counting objects: 40, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (25/25), done.
Writing objects: 100% (40/40), 3.68 KiB | 0 bytes/s, done.
Total 40 (delta 14), reused 0 (delta 0)
To git@github.corp.company.com:Project-1/SomeProject.git
   1000000..000000e  my-branch -> my-branch
 ! [rejected]        master -> master (non-fast-forward)
[remote "origin"]
    url = git@github.corp.company.com:Project-1/SomeProject.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "my-branch"]
    remote = origin
    merge = refs/heads/my-branch
幸运的是,每次发生这种情况时,我都会收到一条被拒绝的消息,因为我的分支机构落后于主人。我过去只能键入gitpush,它只会推送我正在跟踪的分支。我已经查看了我的git配置,它看起来不应该被推到master

➜  module1 git:(my-branch) git push 
Counting objects: 40, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (25/25), done.
Writing objects: 100% (40/40), 3.68 KiB | 0 bytes/s, done.
Total 40 (delta 14), reused 0 (delta 0)
To git@github.corp.company.com:Project-1/SomeProject.git
   1000000..000000e  my-branch -> my-branch
 ! [rejected]        master -> master (non-fast-forward)
[remote "origin"]
    url = git@github.corp.company.com:Project-1/SomeProject.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[branch "my-branch"]
    remote = origin
    merge = refs/heads/my-branch

有什么方法可以防止这种情况发生吗?

我会小心地使用
git push
,而不指定存储库和refspec参数。根据文档,git将默认为
branch.*.remote
repo和
remote.*.push
refspec

在个人练习中,我总是用下面这样的东西来推动

git推送原点我的分支

您可以始终使用
git branch-vv
显示每个分支正在跟踪的远程对象。将有助于进一步调试


编辑:下面是一个关于
git-push

的默认行为的很好的解释,在使用
git-push
时,我会非常小心,不会指定存储库和refspec参数。根据文档,git将默认为
branch.*.remote
repo和
remote.*.push
refspec

在个人练习中,我总是用下面这样的东西来推动

git推送原点我的分支

您可以始终使用
git branch-vv
显示每个分支正在跟踪的远程对象。将有助于进一步调试

编辑:下面是一个关于
gitpush

Configure
push.default
您要将
push.default
设置为
简单
上游
当前
之一。事实上,您可能想要
简单的

要为自己设置
simple
模式,对于尚未设置其他值的所有存储库,请使用:

git config --global push.default simple
要在一个特定存储库中覆盖此选项,请使用,例如:

git config push.default upstream
(假设您想要当前存储库的
上游
模式,而不管您的
--全局
设置如何)

“默认值”取决于您的Git版本。 在2.0之前的Git版本中,初始默认值为
匹配
。这是你现在看到的行为,显然不是你想要的

在Git版本2.0或更高版本中,初始默认值为
simple
。如果这是您想要的,并且git--version
告诉您有2.0或更高版本,那么您不必设置任何内容

什么是
简单
上游
意思 在Git中,每个分支(本地分支名称,如
master
mybranch
)都可以有一个“上游”设置。(或者它可以没有上游设置,但这对我们来说不是很有用!)设置或更改上游的主命令是
git branch--set upstream to

上游本身是两个重要部分:远程设备的名称,如
原点
,以及远程设备上分支的名称,如
主机
。使用
git branch——将上游设置为
,您只需将远程跟踪分支命名为
origin/master
,即可同时设置这两个分支,这一点显而易见

设置后,
git push
将从远程部件的名称中选择远程,并从分支部件的名称中选择要推送到的分支。(当然,您从默认分支推送到当前分支的分支,正是当前分支的上游设置了其他两个部分。)

假设您当前的分支是
$branch
,其上游是
$remote/$upstream\u branch
。使用
简单
上游
意味着:

git push
指:

git push $remote $branch:$upstream_branch
simple
设置增加了一个额外的约束:如果
$upstream\u branch
$branch
的名称不同,则此默认推送将停止(拒绝运行)

当前的
是什么意思
请注意,上述两项都要求当前分支具有上游分支。使用
current
有点像使用
simple
,只是Git不需要完全的上游设置。它只需要“远程”部分。(您可以编写
git push origin
来提供该部分,或者您当前的分支可以有一个远程设置,带或不带上游的另一半。)
git push现在不需要
$upstream\u branch
,只需执行以下操作:

git push $remote $branch:$branch
同样,新的默认设置是
simple
,这通常是正确的设置。

Configure
push.default
您要将
push.default
设置为
简单
上游
当前
之一。事实上,您可能想要
简单的

要为自己设置
simple
模式,对于尚未设置其他值的所有存储库,请使用:

git config --global push.default simple
要在一个特定存储库中覆盖此选项,请使用,例如:

git config push.default upstream
(假设您想要当前存储库的
上游
模式,而不管您的
--全局
设置如何)

“默认值”取决于您的Git版本。 在2.0之前的Git版本中,初始默认值为
匹配
。这是你现在看到的行为,显然不是你想要的

在Git版本2.0或更高版本中,初始默认值为
simple
。如果这是您想要的,并且git--version
告诉您有2.0或更高版本,那么您不必设置任何内容

什么是
简单
上游
意思 在Git中,每个分支(本地分支名称,如
master
mybranch
)都可以有一个“上游”设置。(或者它可以没有上游设置,但这对我们来说不是很有用!)