Git - 暂时切换

时间:2014-09-05 06:42:06

标签: git

我已经看过了: Temporarily switch working copy to a specific Git commit Is it possible to switch between GIT commits? Git switching between commits 但是,我想找出一个特定主题:

我目前不在团队中工作,

我使用Git在本地保存我的项目历史(没有GitHub或Bitbucket)并且只有主分支,

我不会在我的工作目录外推送我的提交.git直到项目结束。 我的问题很简单:

我怎样才能安全地返回我之前的一个提交(有点时间机器),而不是想要打破现有的树索引?

在此实验期间,如何确保在此特定提交后添加的文件不会出现在工作目录中?

我怎样才能安全地返回到树的HEAD并再次 - 确保在过去的那段特定提交之后删除的文件(很久以前,不是这次)将不会出现在工作目录中?

我问这个问题的原因很简单:我现在正在学习,因此希望不时地回来看看(只读) - 过去发生的事情(比如一个月前)。

谢谢。

2 个答案:

答案 0 :(得分:3)

我认为这可以满足您的需求。

git stash --include-untracked
git checkout <commit>

git checkout master
git stash pop --index

对于完全干净的工作树,您可以将--include-untracked替换为--all以隐藏被忽略的文件。

答案 1 :(得分:0)

一个简单的解决方案是:

  • 再次克隆您的本地回购
  • 在新克隆中进行实验

那样:

  • 您的原始回购仍然在主人身上
  • 您可以在第二个回购中git checkout anOldCommitSHA1进行git stash

您可以保留在主仓库中并检查您想要的任何旧提交,但是:

  • 之前执行{{1}}(以确保正在进行的任何工作都被隐藏)
  • 执行git clean -d -f -x之后(再次结帐时),清除使用旧提交工作树时可能生成的任何本地文件。