Git-临时在

Git-临时在,git,Git,我已经看过了: 不过,我想整理一个具体的主题: 我现在不在团队里工作 我使用Git在本地保存项目历史记录(没有GitHub或Bitbucket),并且只有主分支 在项目结束之前,我不会将提交推送到工作目录中的.git之外。 我的问题很简单: 我如何安全地返回到以前的一个提交(类似于时间机器),而不考虑破坏现有的树索引 我如何确保在此特定提交之后添加的文件在此实验期间不会出现在工作目录中 我如何才能安全地返回到树的顶端,并再次确保在过去(很久以前,不是这次)的特定提交之后删除的文件不会出现在工作目

我已经看过了: 不过,我想整理一个具体的主题:

我现在不在团队里工作

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

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

我如何安全地返回到以前的一个提交(类似于时间机器),而不考虑破坏现有的树索引

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

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

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


谢谢。

一个简单的解决方案是:

  • 再次在本地克隆您的回购协议
  • 在那个新克隆人身上做实验
这样:

  • 您的原始回购协议仍保留在master上
  • 您可以在第二次回购中根据需要执行git checkout anOldCommitSHA1
您可以保留在主回购中,并签出任何您想要的旧提交,但:

  • 在之前做一个
    git隐藏
    (确保任何正在进行的工作都被隐藏起来)
  • 在使用旧的提交工作树时,执行after(再次签出master时)以清除可能生成的任何本地文件

    • 我想这正是你想要的

      git stash --include-untracked
      git checkout <commit>
      
      git checkout master
      git stash pop --index
      
      git隐藏--包括未跟踪的
      git签出
      切换到主分支
      git隐藏pop--索引
      

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

      谢谢。-我目前正在使用这种方法但我有点懒得在vhosts和hosts文件中为克隆项目创建新条目,我想知道Git中是否有更短的内容,风水方式…我不使用repo,我只有一个与.Git一起工作的目录inside@Mike一个包含
      .git
      文件夹的工作树是一个git repo:您正在使用一个repo。本地回购协议。非裸回购(与裸回购相反,裸回购没有工作树:)@Mike,这意味着我提到的第一个解决方案(克隆本地回购)不涉及vhost和其他网络设置:您可以将本地回购(本地文件夹)克隆到另一个本地文件夹中。确定。-注明我是Git的新手但AFAIK隐藏只能应用于“跟踪文件”那么像.gitignore、.idea、netbeans等我标记为不被跟踪的文件呢?
      git checkout
      如何不满足您的需要?它不会删除在这个特定提交之后添加的工作目录中的文件,AFAIK@Mike:是的。它不会删除未跟踪的文件,但如果跟踪的文件在早期提交中不存在,则会将其删除。确定。-注明那么像.gitignore、.idea、netbeans等我标记为不被跟踪的文件呢没有拖拉,只是提问。@Mike.gitignore被跟踪。另一个,如果未跟踪,默认情况下不会被触及(或者您可以应用Chris Martin的解决方案)1。是否意味着我从“git reflog”中得到了什么比如“24b7ecb”?2.“git stash--include untracked”的结果会成为树的顶端吗?对不起,“refspec”是一个错误的词(这意味着)。将其更改为“提交”。它可以是提交哈希(就像您在
      git reflog
      中看到的一样,是的,但在
      git log
      中更常见)、标记名或分支名。@Mike不,隐藏不会创建提交。我想警察比我能更好地解释藏匿的东西。“当您想记录工作目录和索引的当前状态,但又想返回到一个干净的工作目录时,请使用git stash…”我刚刚了解了stash的作用,这可能不是我想要的想象一下:这个项目已经在一个月前完成了。没有什么可更改、添加或提交的。-我只是想回到一个特定的状态,看看这一切是什么样子,然后回到头部。-因此,在所有实验之后,不必对工作目录和git树进行任何更改。-我知道本地克隆是最安全的解决方案,但这需要额外的努力。-我希望有人能帮我做个旁路手术。我喜欢藏东西的方法。我更喜欢我在回答中提到的克隆方法(当你在回购协议副本中玩的时候,这样做会让你更省心。)