Git - 不能推 - "! [远程拒绝]主人 - > master(工作目录有未分级的更改)"

时间:2018-01-24 00:34:51

标签: wordpress git git-push git-remote git-add

我正在努力建立一个简单的"具有本地版本,暂存版本和生产版本的Wordpress安装的git工作流程。我想要做的就是在本地进行更改,从本地推送到暂存,从本地推送到生产。起初我认为这将是一项简单的任务。我已经能够初始化存储库,添加两个遥控器" staging"和"生产",初始化遥控器上的git,并通常使用命令将更改从我的本地版本推送到登台和生产服务器:

git add .
git commit -m "some changes"
git push staging master
git push production master

然而,在我工作期间的某些时候发生了一些变化,虽然我仍然可以推送到Staging,但现在我无法在没有收到错误的情况下推送到Production服务器:

! [remote rejected] master -> master (Working directory has unstaged changes)

当我做" git status"它说:

On branch master
nothing to commit, working tree clean

在阅读Stack Overflow上几个类似但不同的问题的答案后,我尝试了以下内容:

git pull staging master
git pull staging master --rebase
git pull production master
git pull production master --rebase

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

git config --local receive.denyCurrentBranch updateInstead

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

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:1)

制作一个git bare repo是最好的做法 你可以推送到一个非裸机...但只有当你从源端推送文件时你没有修改目标端的文件。请参阅push-to-deploy

但最佳做法仍然是添加一个后接收挂钩(as in my other answer),以便在实际文件夹中签出您收到的所有文件。