Git分支试图推送到master。
我不知道我改变了什么,但最近当我尝试使用“git push”向上推我的一个分支时,它试图推到远程分支和主分支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
➜ 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
Configurepush.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
,这通常是正确的设置。Configurepush.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
)都可以有一个“上游”设置。(或者它可以没有上游设置,但这对我们来说不是很有用!)