将更改推送到远程仓库而无需提交

45

在不提交到主分支的情况下,是否可能将更改推送到远程仓库?我只用远程仓库进行部署。


你的“I use the remote repo just for deploying.”具体是什么意思? 你要使用Git作为SSH客户端的替代方案,只推送更改吗? - Mot
我认为他的意思是部署使用Git仓库作为源代码的应用程序,例如Heroku所做的那样。 - Bernardo Dal Corno
7个回答

104
您可以创建一个空提交并将其推送: git commit --allow-empty

3
我找的就是这个,尽管fresskoma在技术上是正确的,但对实际问题没有帮助。 - Jacob

16

不,没有办法这样做,因为这完全与“git策略”相反。我不清楚你的部署系统,但我猜想你想要达到的目标的一个好方法是在不同的分支上工作(即,一个用于开发,一个在推送时用于部署),从开发分支合并你想要部署的更改到生产分支。


8
从 Git 工作流角度来看,这是正确的,但它并没有回答问题。有时需要推送没有实际更改的内容以重新触发失败的后端进程。 - Andreas Fester

6
不,你必须先提交(commit)才能推送(push),被推送的是提交记录(commit)。

4

您可以使用--no-edit选项修改最后一次提交,然后强制推送该分支。

git commit --amend --no-edit
git push origin <remote name> -f

1
如果你想要推送特定的提交:
git push <remotename> <commit SHA>:<remotebranchname>

0

我使用的一个解决方案是使用git diff获取补丁文件,然后使用patch将补丁应用到远程仓库。

我没有自动测试脚本可以提供,但是想法是使用git reset --hard将远程仓库重置为与本地仓库相同的状态。

然后使用git diff > patch.txt,传输补丁文件,并使用patch -p0 < patch.txt进行应用。

这对于简单的修改应该有效,但无法处理删除/添加文件和其他更改。


0
我明白如果我们直接推送更改而不生成提交,那么更改不会反映在相应的分支中,您必须在推送到源之前生成提交,无论它是否为空。

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

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