我如何强制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将把它修改到远程仓库