为什么git不会推到本地的repo更新头上?
问题描述:
我有一个当地的回购upstream
和一个downstream
从它克隆。 upstream
有一个非主分支,名为receiving
,我用于推送(无论是否回购)。为什么git不会推到本地的repo更新头上?
当我做git push origin origin/receiving
时,git正确地推送提交对象,但不更新upstream
中的HEAD。我实际上通过在我的编辑器中打开文件并手动更新哈希解决了问题。我仍然想知道是否有什么我可以做的自动化。没有任何权限问题 - 我实际上以root身份执行所有这些回购协议。
答
我觉得你的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
相关:http://*.com/questions/2147741/git-push-only-for-bare-repositories - 你推送到的分支不是当前签出的分支吗? – Mat 2012-01-01 20:58:18
不,我推送到一个分支“接收”,它从来没有签出,只存在于接收推送 – ldrg 2012-01-02 23:46:08
为什么你推送'origin/receiving'?这是远程跟踪分支,它应该指向两个存储库中的相同提交(除非'upstream''' receiving ving'分支已更新,您最近没有取/拉) – knittl 2012-02-26 12:35:00