我如何强制git拉覆盖每一拉的一切?
我有一个CENTRAL裸机存储库,有三个开发人员存储库,可以正常进行推送。
我还有另外两个存储库,从CENTRAL裸回购:一个是现场服务器,另一个是testing/阶段服务器 – 每个从各自的分支拉。
情况是这样的:我有一个post-update
挂钩脚本CENTRAL回购,它会自动访问testing和现场回购,并运行每个拉命令。 这将更新testing和实时服务器,全部取决于哪个分支有新的提交。 这一切都很好。
问题是:紧急情况下可能会有文件直接在服务器上更新(通过ftp或其他),并且CENTRAL更新后的脚本将会因为合并/覆盖冲突而发生失败。 没有办法避免这种情况,这是不可避免的。
我想要发生的是这样的:我希望从实况和testing网站拉总是覆盖/合并拉。 总是。 这些回购将是只有拉,因为它们不是为了发展。
在我所有的研究中,我找不到一个很好的解决办法, 总是强制覆盖本地文件。 这是可能吗? 如果是这样的话,这将会是一个很好的发展情景。
真正理想的做法是完全不使用pull
,取而代之的是reset
:
git fetch origin master git reset --hard FETCH_HEAD git clean -df
(把master
变成你想跟随的任何分支。)
pull
是围绕某种方式合并更改而devise的,而reset
只是简单地使本地副本与特定的提交匹配。
根据您的系统需求,您可能需要考虑稍微不同的选项。
你可以试试这个:
git reset --hard HEAD git pull
(从如何强制“git拉”覆盖本地文件? )
另一个想法是删除整个git并创build一个新的克隆。
我不知道如何做到这一点,但你可以做一些事情:
git reset --hard git pull
甚至
git stash git pull
拉取分支的副本并强制覆盖原始地方的本地文件使用:
git reset --hard origin/current_branch
所有目前的工作将会丢失,并且与原始分支一样
git reset --hard HEAD git fetch --all git reset --hard origin/your_branch
你可以改变挂钩擦拭一切干净。
# Danger! Wipes local data! # Remove all local changes to tracked files git reset --hard HEAD # Remove all untracked files and directories git clean -dfx git pull ...
如果自上次拉/克隆以来尚未提交本地更改,则可以使用:
git checkout * git pull
checkout
会清除你最后一次本地提交的本地修改, pull
将把它修改到远程仓库