我正在尝试为具有本地版本、临时版本和生产版本的 Wordpress 安装设置一个“简单”git 工作流程。我想做的就是在本地进行更改,然后从本地推送到登台,从本地推送到生产。起初我认为这将是一个简单的任务。我已经能够初始化存储库,添加两个远程“登台”和“生产”,初始化远程上的 git 并通常使用以下命令将更改从本地版本推送到登台和生产服务器:
git add .
git commit -m "some changes"
git push staging master
git push production master
但是,在我工作期间的某个时刻,事情发生了变化,虽然我仍然能够推送到暂存,但现在我无法推送到生产服务器而不收到错误:
! [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 实际上正在损害我的工作流程,而不是帮助它。如果有人知道我的错误是什么,我将不胜感激!
我已经放弃这个了~10个月了。他们的回应是我需要意识到我需要启用现有的
push-to-checkout
钩子。
当没有任何更改时,我看到推送失败(带有Working directory has unstaged changes
错误)。
启用示例push-to-checkout
钩子后,我再次能够推送,并且当存在本地更改时我看到了拒绝。
在我的实例中,我更新了失败案例:die "Working directory has unstaged changes"
至
git add .
git commit -m "Save Server Satate"
die "Working directory had unstaged changes. Fetch to retrieve latest."
这模仿了本地和远程头不同步的任何其他共享分支工作流程,鼓励在推送更新之前在本地解决任何冲突。