【发布时间】:2012-05-01 02:36:40
【问题描述】:
如何切换到特定的 Git 提交而不丢失之后所做的所有提交?
我希望本地文件将被更改,但提交的数据库将保持不变,只有当前位置指针设置为当前选择的提交。
我想将文件的状态更改为特定的提交,运行项目,完成后将文件恢复到上次提交。
如何在不压缩整个项目文件夹的情况下做到这一点?
【问题讨论】:
如何切换到特定的 Git 提交而不丢失之后所做的所有提交?
我希望本地文件将被更改,但提交的数据库将保持不变,只有当前位置指针设置为当前选择的提交。
我想将文件的状态更改为特定的提交,运行项目,完成后将文件恢复到上次提交。
如何在不压缩整个项目文件夹的情况下做到这一点?
【问题讨论】:
如果您在某个分支mybranch,请继续git checkout commit_hash。然后您可以通过git checkout mybranch 返回您的分支。我今天有同样的游戏将一个错误一分为二:)另外,你应该知道git bisect。
【讨论】:
git checkout commit_hash。对于某些用例(比如我的)可能更容易。
git bisect 参考;多么有用的工具!
首先,使用git log 查看日志,选择您想要的提交,记下用于识别提交的 sha1 哈希。接下来,运行git checkout hash。完成后,git checkout original_branch。这样做的好处是不移动 HEAD,它只是将工作副本切换到特定的提交。
【讨论】:
git checkout <original_branch>。 git checkout HEAD 实际上是一个 NOOP
git reset --hard <hash> 更改当前分支的 HEAD,而使用 git checkout <hash> 您将获得一个不会更改任何分支的分离结帐,并且您可以轻松返回而无需知道您的分支的原始哈希 ID如this answer所示。
除了这里向您展示如何git checkout <the-hash-you-want> 的其他答案之外,值得知道您可以切换回您使用的位置:
git checkout @{-1}
这通常比:
git checkout what-was-that-original-branch-called-again-question-mark
如您所料,git checkout @{-2} 将带您回到您在两个 git checkouts 前所在的分支机构,其他号码也是如此。如果你能记住你在哪里获得更大的数字,你应该为此获得某种奖章。
遗憾的是,对于生产力,git checkout @{1} 不会带你去你将来所在的分支,这是一种耻辱。
【讨论】:
git checkout -是git checkout @{-1}的简写别名
@{n} 语法也很有用,因为它适用于许多 git 命令。我发现很难在不使答案相当混乱的情况下添加您的速记。相反,我对你的评论投了赞成票——我希望人们会看到它。再次感谢。
git merge - 将您上次签出的分支合并到当前签出的分支中。就像 bash 中的 cd -。
我曾经实现过 git checkout @{10} 并且工作正常,然后我的大杯焦糖咖啡突然掉到了电脑上......
【讨论】: