如何在不丢失它之后进行特定 Git 提交的切换?
我希望本地文件会发生改变,但提交的数据库仍然完整无缺,只是当前位置指针设置为当前选择的提交。
我想将文件状态更改为特定提交,运行项目,完成后将文件恢复到最后一次提交。
如何在不压缩整个项目文件夹的情况下完成此操作?
如果你在某个分支 mybranch
上,直接执行 git checkout commit_hash
。然后用 git checkout mybranch
返回你的分支。今天我也在解决一个 bug 时进行了类似的二分查找 :) 另外,你应该了解一下 git bisect。
git checkout commit_hash
命令。这对某些用例(比如我的)可能更容易。 - enderlandgit bisect
的支持,它是一个非常有用的工具! - Niekgit switch -
命令返回到原始分支。 - PiaBa首先,使用 git log
查看日志,选择你想要的提交,记下用于标识提交的 sha1 哈希值。接下来,运行 git checkout hash
。完成后,git checkout original_branch
。这种方法的优点是不会移动 HEAD,它只是将工作副本切换到特定的提交。
git checkout <original_branch>
。git checkout HEAD
实际上是一个 NOOP。 - Abe Voelkergit reset --hard <hash>
命令会改变当前分支的 HEAD,而 git checkout <hash>
命令则会进入分离头指针(detached HEAD)状态,不会改变任何分支。使用 git checkout
命令可以轻松地返回原来的状态,而无需知道分支的原始哈希值,具体操作可参考这篇答案。 - jofel除了其他回答中展示给您如何通过git checkout <the-hash-you-want>
切换版本外,值得知道的是您可以使用以下命令返回到之前的版本:
git checkout -
git checkout @{-1}
这通常比以下方式更方便:
git checkout what-was-that-original-branch-called-again-question-mark
如您所料,git checkout @{-2}
会将您带回两个git checkout
之前的分支,其他数字同理。如果您能记住更大的数字所在的位置,那么您应该得到某种奖章。
遗憾的是,对于生产力而言,git checkout @{1}
并不能将您带到未来要使用的分支,这真是令人惋惜。
git checkout -
是git checkout @{-1}
的简写别名。 - N7L@{n}
语法也很有用,因为它适用于许多git命令。我发现如果加入你的速记会让答案变得相当混乱。相反,我投了你的评论一票 - 希望人们能看到它。再次感谢。 - Benjohngit merge -
将上次检出的分支合并到当前检出的分支中。这就像 bash 中的 cd -
。 - N7L