Git-无法推送-“![远程拒绝] master-> master(工作目录中有未暂存的更改)”

use*_*864 5 git wordpress git-push git-add git-remote

我正在尝试为具有本地版本,登台版本和生产版本的Wordpress安装设置“简单” git工作流。我要做的就是在本地进行更改,然后从本地推送到暂存,从本地推送到生产。起初,我认为这将是一个简单的任务。我已经能够初始化存储库,添加两个远程“ staging”和“ production”,在远程控制器上初始化git,并通常使用以下命令将更改从本地版本推送到暂存和生产服务器:

git add .
git commit -m "some changes"
git push staging master
git push production master
Run Code Online (Sandbox Code Playgroud)

但是,在工作期间的某些时候,发生了一些变化,尽管我仍然可以推送到暂存,但是现在我无法在没有出现错误的情况下推送到生产服务器:

! [remote rejected] master -> master (Working directory has unstaged changes)
Run Code Online (Sandbox Code Playgroud)

当我执行“ git status”时,它说:

On branch master
nothing to commit, working tree clean
Run Code Online (Sandbox Code Playgroud)

在阅读了关于堆栈溢出的几个相似但不同的问题的答案之后,我尝试了以下方法:

git pull staging master
git pull staging master --rebase
git pull production master
git pull production master --rebase
Run Code Online (Sandbox Code Playgroud)

我也尝试在远程服务器上执行此命令

git config --local receive.denyCurrentBranch updateInstead
Run Code Online (Sandbox Code Playgroud)

我已经完全重新创建了几次服务器和存储库,只是为了完全从头开始重新安装git,但是此问题在一段时间后仍会继续发生,此时,Git实际上正在浪费我的工作流程而不是提供帮助。如果有人对我的错误有任何了解,将不胜感激!

Jay*_*ske 5

我遇到了类似的问题,被推到一个非裸露的远程仓库中,我希望立即检查工作副本文件。我的遥控器配置了receive.denyCurrentBranch updateInstead,但是它仍然拒绝在不可预测的时间进行推送。

Git 2.4添加了一个push-to-checkout钩子,该钩子可以覆盖此类push失败。我根据githooks文档中的示例编写了一个简短的脚本。

#!/bin/sh set -ex git read-tree --reset -u HEAD "$1"

.git/hooks/push-to-checkout在远程仓库中安装了此脚本。请注意,此脚本将覆盖远程服务器中的工作副本-它不会尝试将对这些文件的任何更改合并。这是因为我希望工作副本仅反映存储库中的文件。

  • 谢谢!!!如果可以的话,我会投票100次。我唯一没有提到的就是更改文件权限,使其可执行`chmod + x push-to-checkout`然后生效。 (3认同)

Von*_*onC 1

制作 git bare 存储库是推动的最佳实践。
您可以推送到非裸文件...但前提是您在从源端推送文件时没有修改目标端的文件。请参阅推送部署

但最佳实践仍然是添加一个接收后挂钩(如我的其他答案中所示),以便在实际文件夹中签出您收到的所有文件。