我需要将本地计算机中的所有文件还原到早期版本,并按原样保留未跟踪的文件.我使用Git找到了这个Rollback文件到更早的版本并且先做了
git reset <hash>
Run Code Online (Sandbox Code Playgroud)
我的文件仍然和以前一样,所以我做了
git checkout <hash>
Run Code Online (Sandbox Code Playgroud)
这也没有帮助.然后我注意到git log没有显示修改后完成的修订.
我很困惑该怎么做恢复早期修改的状态,任何建议?
Jan*_*dec 10
两者reset和checkout命令都有多种含义,具体取决于参数,含义略有不同.
reset --soft <rev>:保留索引和文件完整reset --mixed <rev> (这是rev的默认值):使索引反映修订时的状态,但保留文件完整reset --hard <rev>:使用指定的修订状态覆盖索引和文件.git add).它遵循:
git reset <rev>
git checkout <rev>
Run Code Online (Sandbox Code Playgroud)
等同于
git reset --mixed <rev>
Run Code Online (Sandbox Code Playgroud)
并且不会修改磁盘上的状态.你应该做的任何一件事:
git reset --hard <rev>
Run Code Online (Sandbox Code Playgroud)
要么
git checkout <rev>
Run Code Online (Sandbox Code Playgroud)
第一个将修改当前分支指向的位置,而后者将切换分支.也不会触及非版本化文件.
如果你这样做了
git reset <rev>
Run Code Online (Sandbox Code Playgroud)
已经想要的效果了
git reset --hard <rev>
Run Code Online (Sandbox Code Playgroud)
跟进吧
git checkout .
Run Code Online (Sandbox Code Playgroud)
(pathspec表单而不是修订表单).
更新:请注意
git reset --hard <rev>
Run Code Online (Sandbox Code Playgroud)
将使当前分支指向<rev>,所以它将像<rev>从未发生过的提交.这被称为"倒带",如果某人已经在分支上开展自己的工作,将会造成一些麻烦,因为他们的历史仍然会有这些修改.如果您想要创建一个撤消所有更改的新提交<rev>,您可以执行以下操作:
git revert <rev>..
Run Code Online (Sandbox Code Playgroud)
此命令创建一个新提交,撤消在指定的提交中完成的所有更改.它无法还原合并.要在合并之前恢复到修订内容并保留历史记录,您可以尝试:
git reset --mixed <rev>
git reset --soft HEAD@{1}
git commit
Run Code Online (Sandbox Code Playgroud)
第一次重置将移动HEAD 和索引,第二次重置将返回HEAD到之前一次操作的位置,因此在此之后你有索引<rev>和HEAD返回原来的位置.所以你现在可以提交.操作将保持工作树不变.您可以在git checkout .之后,或者只是进行第一次重置--hard以获取工作树内容<rev>.