Git 推送提交而不更新远程分支引用

Git push commits without updating remote branch ref

我有一些正在处理的提交,我不想在我的硬盘崩溃时丢失它们。但是,我需要在完成之前更改它们(变基、压缩、重新排序等),所以我不能只将分支推送到远程,因为这需要我稍后强制推送,我不想这样做做。

所以...我可以只上传提交而不更新远程分支标记。这样,我就可以下载存储库,找到我的提交,并在我的硬盘崩溃时继续工作。

问题是,我不知道该怎么做。我已经阅读了 refspec parameter specification,它只是展示了指定我要更新哪个 ref 的不同方法,但我不想更新任何 ref。谷歌搜索也无济于事,我所看到的只是关于“cherry-pick”之类的教程,我不想要这些。

从分离的头上推也不起作用,它说使用git push origin HEAD:<name-of-remote-branch>,但我不想指定任何分支名称。

有没有一种(简单的)方法可以只上传提交而不更新任何引用? (不,无论如何推入一个分支然后立即将该分支推回到刚才的位置不是一个好主意。)

第一个想法: 也许我在你的问题中错过了这个潜在的解决方案。如果不是,请按 this SO question.

中所述推送到不同的分支

第二个想法: 为您当前的远程状态创建一个标签,推送标签或通过 Gitlab/Github 远程创建标签,然后强制推送您的新状态。该标记可确保保留您之前的提交。

创建一个不同的遥控器,将你喜欢的任何内容推送到它。在 GitHub,这通常是通过分叉原始 repo 来完成的。如果您想将其保密,请在 U 盘上创建它(使用 git clone --bare ... 创建没有工作副本的克隆)。

恕我直言,最简单的方法是使用@flyingdutchman 的回答:推送到另一个分支。

你可以随意取名字,例如:kajacx/dontreadthis/backups/20201202,或者任何适合你的名字,并清楚地表明“这个分支是我的,而且是临时的”。


就 refspecs 而言:如果您提供的名称实际上是一个完整的 ref 名称(以 refs/... 开头),那么您可以推送到不会与常规分支一起列出的内容(分支只是以 refs/heads/...).

开头的引用

你可以试试:

git push origin HEAD:refs/kajacx/backups/20201202

不过,服务器可能有拒绝推送此类引用的设置,所以 YMMV。

如果推送被接受:此引用将在 git ls-remote origin.

中列出

一旦不再需要它们,您还必须清理您的“私人参考”。