将整个项目切换为先前的提交

时间:2012-01-01 11:56:06

标签: git commit

考虑一个在后端使用git的项目管理应用程序。

新版本始终使用git add .后跟git commit创建。

出于评估目的,我想要一种方法来获取存储在其中的旧版本项目,使整个目录内容恢复到指定的commit.Also,在评估之后,必须将内容恢复为最新版本。

如何实现这一目标?

额外信息(可能没有必要):它是一个网络应用程序,用于存储在php,远程服务器上运行并通过网络访问的学术项目。

2 个答案:

答案 0 :(得分:8)

这是gitgit checkout的基本功能之一。

$ git checkout branch_or_tag_name

更改您的工作目录与该分支或标记的匹配。

$ git checkout commit_hash

使当前目录反映发生提交时存储库的状态。 (如果你这样做,请小心,你将处于“超级头”模式 - 你不应该修改该状态的文件。)

您还可以简单地为此“评估”创建一个分支,并在一个操作中检查它:

$ git checkout -b evaluation commit_hash

完成后,只需检查以前的分支,然后更新工作目录。

$ git checkout master # or whatever your main branch is.

(如果您不再需要,可能git branch -d evaluation。)

答案 1 :(得分:3)

如果您希望将文件放在工作目录以外的其他目录中,则另一种解决方案是使用git archive

首先,使用git branch创建你的引用(git中没有任何分支,它们被称为引用,它指向提交,因此指向它背后的所有历史记录):

git branch oldversion <refspec>

请参阅git help branch了解refspec的内容(SHA1,来自其他refspec的相对“路径”等)。

然后,创建您希望旧文件所在的目录(让我们称之为/path/to/oldstuff)并使用项目目录中的git archive:

git archive oldversion | tar xvf - -C /path/to/oldstuff

示例:我一直使用最新的Linux内核,并且有一个git存储库以及Greg KH的稳定树。当我想要一个最新的稳定树的树来编译它时,我就是这样做的(这里是稳定的内核3.1.6):

$ cd /usr/src/linux-git
$ su
# git archive --prefix=linux-3.1.6/ v3.1.6 | tar xvf - -C ../