我试图将提交从一个分支A推送到另一个分支B.
所以当我使用以下命令时 -
dev > git push origin dev:staging
然后它说,
! [rejected] dev -> staging (fetch first)
问题是,当我做git branch -a
时,它没有列出临时分支。
任何帮助都非常感谢。提前致谢。
你的git push
命令说:
origin
中存储的URL中调用另一个Git。dev
确定的提交,以及你拥有的所有他们没有提交的提交。 (运行git rev-parse dev
以查看提交的哈希ID,或者git log dev
以查看该提交以及从该提交可以访问的所有早期提交。)staging
设置为步骤2中使用的哈希ID。在这些步骤中没有任何地方有任何建议,您的Git应该在您的存储库中使用名称staging
做任何事情。您只是要求他们在其存储库中使用名称staging
执行某些操作。
你可以运行git fetch origin
来引导你的Git在同一个URL上调用他们的Git。然后,您的Git将拥有所有分支名称的Git列表,以及这些分支名称指向的提交哈希ID。对于你没有的每个这样的提交,你的Git将从他们的Git获得提交以及他们拥有的你没有的任何早期提交。当您的Git完成所有这些新提交后,您的Git将更新甚至在您的存储库中创建名称,以记住它们的分支提示哈希值。
你的Git将使用的名称是origin/staging
:你的Git将重命名他们的分支名称,以制作你的远程跟踪名称。如果他们有master
,dev
和staging
,你的Git将更新或创建你的origin/master
,origin/dev
和origin/staging
。
所以,我知道推送告诉你要取,我明白你的本地回购没有staging
分支......但是当你说这是“问题”时,我不明白。
你说要把你的dev
分支推到偏远的staging
分支。该错误表明远程staging
分支存在并指向无法从您的dev
ref访问的提交 - 意味着更新不是快进并且将是有效的“上游rebase”,可能会丢失其他人的更改并且肯定会将repo的所有其他用户置于他们需要恢复的糟糕状态。
这并不意味着staging
应该出现在你当地的repo的分支列表中,即使是-a
,因为你可能没有从遥控器中获取staging
ref。如果你做一个git fetch
,那么之后我会期望origin/staging
被包含在git branch -a
的输出中。