【问题标题】:Why won't git push to a local repo update heads?为什么 git 不会推送到本地 repo 更新头?
【发布时间】:2012-01-31 11:56:18
【问题描述】:

我有一个本地 repo upstream 和一个从它克隆的 downstreamupstream 有一个名为 receiving 的非主分支,我用于推送(两个 repo 都不是裸露的)。

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

【问题讨论】:

  • 相关:stackoverflow.com/questions/2147741/… - 你推送到的那个分支不是当前签出的分支吗?
  • 不,我推送到一个“接收”分支,该分支永远不会被签出,只是为了接收推送而存在。
  • 为什么要推origin/receiving?那是远程跟踪分支,它应该指向两个存储库中的相同提交(除非upstreamreceiving 分支已更新并且您最近没有获取/拉取)

标签: git


【解决方案1】:

我认为你的推送命令是错误的。你想推送本地分支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
$

【讨论】:

  • 谢谢!我认为对于遇到此问题的其他人来说,阅读 git push 手册页中的 refspecs 也是值得一提的。如果我了解 refspecs,我一开始就不会问这个问题!
【解决方案2】:

您必须使用git push origin receiving 而不是git push origin origin/receiving

【讨论】:

    猜你喜欢
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2018-04-25
    • 2020-02-19
    • 2015-06-25
    相关资源
    最近更新 更多