回到先前的提交而不破坏当前的提交

时间:2012-01-31 23:20:37

标签: git

所以我想回到我之前的承诺,而不是破坏我现在拥有的最新版本。我该怎么做呢?执行git reset HARD会破坏我当前的提交权吗?

3 个答案:

答案 0 :(得分:13)

假设您没有进行任何未经检查的更改,git checkout $OLD_COMMIT会将您带到那里,git checkout $BRANCH会将您带回来。

这将使你潜在地处于一个独立的头上;有关详细信息,请参阅git checkout --help,但如果你想要的只是在旧版本上运行测试或者应该没问题。

您可能也有兴趣: git stash - 暂时存储未提交的更改 git show $SHA1将旧提交的更改显示为差异 git show ${REF}:${PATH}显示$ REF中$ PATH的内容

(在最后的git show调用中,Ref可以是sha,或者是分支,或者其他什么。)

答案 1 :(得分:1)

使用git revert。这允许您撤消特定的提交,而不会扰乱提交,因为。

如果我理解你的情况,你有:

* abc123de a_good_commit
* bc123def a_bad_commit
* c123def4 another_good_commit

您可以git revert HEAD^或使用特定哈希:git revert bc123def

答案 2 :(得分:0)

对之前的提交执行任何类型的reset都会从您的分支中删除以后的提交,这样它们就不再是其中的一部分了。 提交是您在执行git log时看到的项目。

这并不意味着这些提交会立即被销毁,但是由于您的意图不是要删除它们,您可能想要创建另一个分支并使用它来查看您之前的提交以便您的原始分支留下最新的提交完好无损。 (用于创建新分支的关键字为:git branch <name>git checkout -b <name>。**)

硬重置与软重置更多地与工作树中的文件发生的事情有关,更重要的是与未经修改的更改有关。在本质上,当您指定--hard时,唯一被破坏的是您未经修改的更改。只要您在最近的提交中留下了一个分支(或者您记得提交ID),您就可以通过切换回该分支或提交来恢复文件。 (即git checkout

**你可以在不创建额外分支的情况下环顾四周,Daniel Pittman的回答描述了这一点。