暂时将工作副本切换到特定的Git提交

Pau*_*aul 234 git commit temporary

如何切换到特定的Git提交而不会丢失之后的所有提交

我希望更改本地文件,但提交'数据库将保持不变,只有当前位置指针设置为当前选定的提交.

我想将文件的状态更改为特定的提交,运行项目,完成后,将文件恢复到上次提交.

如何在不压缩整个项目文件夹的情况下执行此操作?

Ale*_*lov 331

如果您在某个分支机构mybranch,请继续git checkout commit_hash.然后你可以回到你的分支git checkout mybranch.今天我有同样的游戏将一个bug分成两半:)另外,你应该知道git bisect.

  • 请注意,如果您在一个干净的存储库而不需要进行分支,那么您可以执行`git checkout commit_hash`.某些用例(如我的)可能更容易. (6认同)
  • upvote为`git bisect`参考; 多么有用的工具啊! (6认同)
  • 从 Git 2.23 开始,你还可以使用 ```git switch -``` 返回到原始分支 (3认同)

Fem*_*ref 54

首先,使用git log查看日志,选择所需的提交,记下用于标识提交的sha1哈希.接下来,运行git checkout hash.完成后,git checkout original_branch.这具有不移动HEAD的优点,它只是将工作副本切换到特定的提交.

  • 我认为你的意思是`git checkout <original_branch>`.`git checkout HEAD`实际上是一个NOOP (4认同)
  • `git reset --hard <hash>`改变当前分支的HEAD,而使用`git checkout <hash>`你得到一个不会改变任何分支的分离签出,你可以在不知道原始哈希ID的情况下轻松返回您的分支如本答案所示. (3认同)

Ben*_*ohn 10

除了此处显示的其他答案外,git checkout <the-hash-you-want>值得知道的是您可以切换回使用的位置:

git checkout @{-1}
Run Code Online (Sandbox Code Playgroud)

这通常比以下更方便:

git checkout what-was-that-original-branch-called-again-question-mark
Run Code Online (Sandbox Code Playgroud)

如您所料,git checkout @{-2}将带您回到两年前git checkout的分支机构,其他号码也是如此。如果您能记住大数字所在的位置,则应该获得某种奖章。


可悲的是,对于生产力而言,git checkout @{1}它并不能带您进入将来的分支机构,这真是可惜。

  • 请注意,“git checkout -”是“git checkout @{-1}”的简写别名 (5认同)