2012-10-31 91 views
1

我有一个git存储库,我从开发中推动并从测试和生产拉。恢复整个git存储库到一个特定的版本

说我到目前为止做了17次提交,并且所有的服务器都在同步。
现在我想在生产中恢复提交#15,但不是only a (few) file(s):我希望生产服务器上的所有文件都反映提交#15。

我也不想为此创建一个新的提交,并且还能够前滚到最新的提交或其他来自中央存储库的提交。

我的第一个猜测是不宣而任何文件运行它,例如,

git checkout [commit-15-SHA1] 

有没有更好/更安全办呢?什么是git方式

+2

您的建议命令完全是*执行此操作的方式。你遇到任何问题吗? –

+0

我得到了一个“_你处于分离的HEAD状态,你可以环顾四周,进行实验性的改变并提交它们,并且你可以放弃你在这个状态下做出的任何提交,而不会通过执行另一个结账而影响任何分支。 ]_“ 信息。我猜这是因为我没有提前储藏? –

+1

不,“分离HEAD”状态发生是因为您当前的HEAD指向没有任何其他名称的提交。因此,如果您要根据当前位置进行新的提交,除了记下SHA1之外,您无法引用任何新提交。如果您不打算根据您当前的HEAD进行任何新的提交,则无需担心。 –

回答

4

如果你想恢复,然后从提交#15分支,保持所有修订提交后#完好无损,你的是一个好方法。

git checkout [Commit-15-SHA] 

如果你只是想“备份”在提交历史,不失当前的变化,和最近两年提交,然后尝试软复位。

git reset --soft [Commit-15-SHA] 

但是,如果你想用核武器炸一切,你变了,包括所有的修改承诺15,那么你做一个硬复位。

git reset --hard [Commit-15-SHA] 

了解更多关于git reset的信息here

相关问题