如何在不创建分支的情况下推送git提交?

4
我希望能够在不创建远程分支的情况下,将一个提交(例如:git switch HEAD -d)从一个分支移出,并将其推送到远程(例如:GitHub)上。使用场景是有时我想问别人“这是你的意思吗?”并链接到一个提交,但我不想让 GitHub 提示我创建 PR,或者让这个垃圾出现在你可以列出分支的任何地方。如何在不创建分支的情况下推送 Git 提交?

我认为你不可能有一个没有标签的孤立提交,但是tag可能足以满足您的要求,允许您指向提交或标签而不会污染分支命名空间? - Alexander Nied
@AlexanderNied 我很感激你的建议!我宁愿不要污染标签命名空间。也许作为一种解决方法,我可以简单地创建一个别名或shell脚本,将分支/标签推送上去,并在推送后立即删除它。 - schpet
我只会创建一个分支。当你完成后,你可以随时删除它(git push --delete origin my-example-branch)。 - larsks
你可以尝试推送到一个非分支(refs/heads/...)或标签(refs/tags/...)的命名引用:git push origin my_commit:refs/snapshots/xyz。我不知道GitHub对接受的名称强制执行哪些规则。 - LeGEC
一个解决方案是将你同事的代码仓库添加为你自己的远程仓库。但这需要在他们的机器上设置SSH或HTTPS。 - Code-Apprentice
显示剩余2条评论
1个回答

5
据我所知,你需要创建对它的引用。幸运的是,你可以通过以下步骤实现接近实际需求的效果:
  1. 使用该提交记录创建一个本地分支。
  2. 将其推送到远程仓库。
  3. 立即删除远程分支。
  4. 向用户提供完整的40个字符的哈希值以获取: git fetch origin <full-hash>
请注意,你能够执行以上步骤的唯一原因是垃圾收集不是瞬时进行的,这使得孤立的提交记录能够在一段时间内保留下来。在GitHub和许多其他工具的情况下,它甚至可能会永久保留而无需进一步干预。在这种情况下,该分支的生命周期只需要几秒钟,这样你就可以推送“某些内容”。 备注:如果愿意,可以跳过第1步直接将其推送到远程分支名称。
# push commit <hash> to remote branch
git push origin <hash>:some-temp-branch-name
# delete remote branch
git push -d origin some-temp-branch-name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接