Git如何仅推送单个/少量文件至Heroku?解决推送时覆盖网站内容的问题
如何仅推送单个/少量文件到Heroku
首先得明确:Heroku的Git部署机制是基于完整仓库快照的——它会把你推送的分支(比如master)的所有内容,替换成你本地仓库对应分支的当前状态。你之前遇到的admin被替换成旧版本的问题,大概率是因为你的本地仓库里admin相关文件是旧的,推上去就覆盖了服务器上的新内容,而不是因为推送单个文件本身导致的。
不过如果你确实只想推送特定的单个/少量文件,同时不影响其他已在服务器上的内容,这里有两个可行的方案:
方案一:确保本地仓库与远程同步后再推送(推荐)
这是最稳妥的方式,能从根源避免本地旧文件覆盖远程内容:
- 先拉取Heroku服务器上的最新代码到本地:
git pull heroku master - 修改你需要更新的单个/少量文件
- 提交修改:
git add <目标文件名> && git commit -m "仅更新[目标文件名]" - 推送到Heroku:
git push heroku master
因为此时本地仓库和远程完全同步,你只修改了目标文件,推送后服务器上只有这个文件会被更新,其他文件保持不变。
方案二:用临时分支推送单个文件(适合本地不想拉取全量代码的情况)
如果你的本地仓库很久没同步,不想拉取大量无关文件,可通过临时分支实现精准推送:
- 从Heroku远程master分支创建一个本地临时分支,并拉取最新内容:
git fetch heroku master:temp-branch - 切换到临时分支:
git checkout temp-branch - 将你要推送的单个文件复制到这个分支的对应目录下,或者直接在分支里修改文件
- 提交修改:
git add <目标文件名> && git commit -m "仅更新[目标文件名]" - 将临时分支推送到Heroku的master分支:
git push heroku temp-branch:master - 完成后切回原分支,删除临时分支:
git checkout master && git branch -D temp-branch
重要提醒
- Git本身不支持直接推送单个文件,以上方案本质都是通过维护一个包含目标修改的完整分支快照来实现的
- 如果你的修改涉及Django的数据库变更(比如admin模型修改),推送代码后别忘了运行
heroku run python manage.py migrate来同步数据库
内容的提问来源于stack exchange,提问作者Action Series By Abhinav
相关产品推荐
相关产品推荐

