关于Git:Git – 暂时切换


Git - temporarily switch between

我已经查过了:临时将工作副本切换到特定的Git提交是否可以在Git提交之间切换?Git在提交之间切换但是,我想整理出一个具体的主题:

我现在不在一个团队工作,

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

在项目结束之前,我不会将我的提交推到工作目录中的.git之外。我的问题很简单:

我怎样才能安全地返回到以前的一个提交(有点像时间机器),而不考虑破坏现有的树索引?

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

然后我如何才能安全地返回到树的头部并再次确保在过去的特定提交(很久以前,不是现在)之后删除的文件不会出现在工作目录中?

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

谢谢您。


我想这就是你想要的。

1
2
3
4
5
git stash --include-untracked
git checkout <commit>

git checkout master
git stash pop --index

对于一个完全干净的工作树,可以用--all替换--include-untracked,以存储忽略的文件。


一个简单的解决方案是:

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

这样:

  • 您的原始回购仍保留在master上
  • 在第二次回购中,您可以按照自己的意愿执行git checkout anOldCommitSHA1

您可以保留在主回购中,并签出您想要的任何旧的承诺,但:

  • 以前做过一次git stash(以确保任何正在进行的工作都被藏起来了)
  • 在(再次签出master时)之后执行git clean -d -f -x以清除在使用旧的提交工作树时可能生成的任何本地文件。