git本地分支跟远程分支一定要同名才能push吗?

hawkyoung 发布于 2015/05/04 10:46
阅读 12K+
收藏 2
Git

小弟用git有一段时间了,但经常遇到这个问题,索性问一下,希望能有解决方案

测试环境

U12.04

git version 1.7.9.5

测试步骤

我clone了一个远程仓库

git branch -r
  origin/master
  origin/test1

git checkout -b test1test origin/test1

在本地建立一个分支test1test跟踪远程的分支test1

git branch
  master
  test1
* test1test

git config -l

(前面略)....
branch.test1test.remote=origin
branch.test1test.merge=refs/heads/test1

这时问题来了,我做了几个修改,明明看起来是跟踪远程分支了,但是push不上去

echo  hello2 > test1
git add test1 && git commit -m "hello2" && git push

[test1test f4db248] hello2
 1 file changed, 1 insertion(+), 1 deletion(-)
Everything up-to-date

git status
# On branch test1test
# Your branch is ahead of 'origin/test1' by 1 commit.
#
nothing to commit (working directory clean)

再来一次

echo  hello3 > test1 && git add test1 && git commit -m "hello3" && git push

[test1test 1baa86d] hello3
 1 file changed, 1 insertion(+), 1 deletion(-)
Everything up-to-date

git status
# On branch test1test
# Your branch is ahead of 'origin/test1' by 2 commits.
#
nothing to commit (working directory clean)

这个分支的状态始终是Your branch is ahead of 'origin/test1' by xxx commits.

这是为什么?如果我老老实实把分支名叫做test1就可以push?是我哪里理解有问题?


另外问一个相关问题:

还是上面那个测试环境,有的git在clone以后,直接git checkout test1就能建立一个跟踪远程test1的本地分支,有的需要手工指定,这是哪个git版本才有的特性吗?



加载中
1
岁月无痕
岁月无痕

git pull能正常工作的原因是 这个分支的父分支 是有对应远程分支的。

比如你爸有车,如果你想用,有两种方法

1.把自己merge到父分支中,在父分支中push,相当于搭你爸的顺风车。

2.自己在远程也有一个对应的分支,push -u ,相当于自己买个车。

望采纳~

hawkyoung
hawkyoung
我一直以为pull配了对应的远程分支以后,push也理所当然就能工作了……
hawkyoung
hawkyoung
明白了,谢谢!!
0
张山疯
张山疯

程序正常退出的返回值是0。

0
岁月无痕
岁月无痕

不一定,本地分支和它所对应的远程分支的名字可以不一样的

git push -u origin local_branch_name:romote_branch_name 一般 remote_branch_name为空则远程会创建同名分支

local 和remote可以不一样,当使用了 -u 参数后,push local时候 默认的远程分支就是remote了

虎爷
虎爷
我今天也遇到这个问题,但是我发现不要 -u 也是可以的提交: git push origin develop:master 这个设计我无法确定合不合理,但是我觉得 pull 就是用的config里的对应关系,而push还要手动指定这个有点奇葩
hawkyoung
hawkyoung
谢谢回答,我测试了一下,用git push -u的方法可以将本地的分支push到远程的不同名分支上,这个问题算是有一个解决方法了。只是比较好奇直接git push为什么不可以,但git pull却可以工作……
0
tss0823
tss0823
最好loacal branch 跟 remote branch 命名一样。
虎爷
虎爷
没办法,现在使用的多远程仓库,其中有一个仓库的主分支是没有提交权限的
返回顶部
顶部