【问题标题】:why "git push git push origin local-branch :development" will delete remote development branch?为什么“git push git push origin local-branch :development”会删除远程开发分支?
【发布时间】:2017-09-14 08:03:33
【问题描述】:

为什么“git push git push origin local-branch :development”会删除远程开发分支?

jackiewillen  ~/Documents/work/  git push origin yrh-deskmonitor-20170905 :development
Enter passphrase for key '.ssh/id_rsa':
To ssh://git.dianpingoa.com/ed-f2e/gandalf-plus.git
 - [deleted]         development

我尝试“push origin local-branch:development”没问题!所以问题出在分号上;分号前是否有空格是不同的。为什么?

【问题讨论】:

  • 这就是我在stackoverflow.com/q/46090029/1256452 中说准确拼写 至关重要的原因。特别是在命令行解释器中,空格分隔“单词”,并且运行的命令通常会孤立地查看每个单词。 (不过,每个命令都有自己的怪癖。)

标签: git


【解决方案1】:

问题是yrh-deskmonitor-20170905 :development之间的空格

您已按原样推送yrh-deskmonitor-20170905 并删除了development 分支

你可能想跑

git push origin yrh-deskmonitor-20170905:development

改为。

git push的语法是这样的:

git push <target> <refspec1> <refspec2> <refspec3>

其中所有&lt;refspec&gt;s 相互独立,每个都可以采用以下形式:

  1. &lt;branch-or-tag-name&gt;
  2. &lt;local-refname&gt;:&lt;remote-branch-name&gt;
  3. :&lt;branch-or-tag-name&gt;
  4. refs/... 开头的名称指定远程引用时的各种“hacks”。

    • 案例 1 用于在远程 repo 中创建与本地 repo 中的分支直接对应的分支。这是最“自然”的用法。
    • 案例 2 用于在远程仓库中创建一个名称与本地不同的分支(我想是您的案例)
    • 案例 3 用于删除远程仓库中的给定分支。
    • 案例 4 允许创建未签名的标签、不同的遥控器和其他可以被描述为“低级”的 hack。

别担心,您仍然可以通过发出git push &lt;target&gt; yrh-deskmonitor-20170905:development 重新创建development 分支(几乎)而不会造成伤害

【讨论】:

  • 是否有关于这个不同的文档?我在专业版 git 上搜索。但找不到!
  • 查看@SamvelPetrosov 的答案。实际上,一个人可以一次推送多个 refs,用空格分隔它们。也可以通过使用:&lt;something&gt; 参数发出推送来删除远程仓库中存在的引用。这正是你的情况
  • 反过来,git push &lt;target&gt; &lt;ref&gt;:&lt;remote-ref-name&gt; 表单允许使用不同于本地名称的名称保存远程引用
【解决方案2】:

来自 git push 的documentation

git 推送来源:实验性

中查找与实验相匹配的引用 原始存储库(例如 refs/heads/experimental),并将其删除。

【讨论】:

  • “git push origin branch:development”是否等于“git push origin branch branch:branch”+“git push origin:development”?你怎么知道的。
  • 杰基,你没看到你做了什么吗? git push origin branch:otherbranch with no space 表示将本地branch 推送到远程otherbranch。但是git push origin branch :otherbranch 有一个空格 表示要做两件事。首先,将本地branch推送到同名远程branch,然后删除远程otherbranch
  • 还要查看git push 的文档中关于refspec 的部分,可以是&lt;src&gt;:&lt;dest&gt;,其中“推送一个空的 允许您从其中删除 引用远程存储库。”
猜你喜欢
  • 2011-10-10
  • 1970-01-01
  • 2017-04-25
  • 2018-07-04
  • 2017-11-14
  • 2016-04-25
  • 2021-05-02
  • 2012-09-09
  • 2019-05-09
相关资源
最近更新 更多