为什么git不会推到本地的repo更新头上?

问题描述:

我有一个当地的回购upstream和一个downstream从它克隆。 upstream有一个非主分支,名为receiving,我用于推送(无论是否回购)。为什么git不会推到本地的repo更新头上?

当我做git push origin origin/receiving时,git正确地推送提交对象,但不更新upstream中的HEAD。我实际上通过在我的编辑器中打开文件并手动更新哈希解决了问题。我仍然想知道是否有什么我可以做的自动化。没有任何权限问题 - 我实际上以root身份执行所有这些回购协议。

+1

相关:http://*.com/questions/2147741/git-push-only-for-bare-repositories - 你推送到的分支不是当前签出的分支吗? – Mat 2012-01-01 20:58:18

+0

不,我推送到一个分支“接收”,它从来没有签出,只存在于接收推送 – ldrg 2012-01-02 23:46:08

+1

为什么你推送'origin/receiving'?这是远程跟踪分支,它应该指向两个存储库中的相同提交(除非'upstream''' receiving ving'分支已更新,您最近没有取/拉) – knittl 2012-02-26 12:35:00

我觉得你的push命令是错误的。要推动当地分支机构receiving(或者无论你怎么称呼它:

git push origin receiving:receiving 

这应该肯定的工作,这里有一个例子:

$ git init upstream 
$ cd upstream 
$ touch foo && git add foo && git commit -m 'initial' 
$ git branch receiving 
$ cd .. 
$ git clone upstream downstream 
$ cd downstream 
$ >foo echo "downstream change" && git commit -am 'downstream' 
$ git push origin master:receiving 
$ cd ../upstream 
$ git show receiving -- 
commit … 
Author: … 
Date: Sun Feb 26 13:40:02 2012 +0100 

    downstream 

diff --git a/foo b/foo 
index e69de29..2ba104f 100644 
--- a/foo 
+++ b/foo 
@@ -0,0 +1 @@ 
+downstream change 
$ git log --oneline --decorate --graph --all 
* deadbeef (receiving) downstream 
* c0ffee11 (HEAD, master) initial 
$ 
+0

谢谢!我认为值得一提的是,任何其他人都可以阅读git push的手册页中的refspecs。如果我理解了refspecs,我将不会首先提出这个问题! – ldrg 2012-03-02 06:38:08

你要做git push origin receiving,而不是git push origin origin/receiving