如何在git pull之后回到之前的未提交状态

时间:2014-12-03 06:03:42

标签: git version-control

我和我的同事正在和feature-branch一起工作。我已经有几天committed我的变化了。

昨天他已经做出了改变,改变了我们正在进行的项目的结构,但没有损害我的改变。

我已经取消了这些更改并与我一起提交。稍后进行测试后,我意识到它不按照我希望的方式工作,所以我想在拉动之前回到状态。

我无法回到之前的提交,因为这样做我的最新更改将会丢失。

我试过git reflog向我展示了这个输出:

08aed28 HEAD@{0}: commit: Added support for database
4cf0fe8 HEAD@{1}: pull: Fast-forward
d5e2930 HEAD@{2}: commit: Added logs

我做了git reset --hard HEAD@{1},但这不会把我带到以前的状态。

我该怎么办?

1 个答案:

答案 0 :(得分:0)

要继续使用旧版提交中的更改,我建议您使用以下命令链 - 我假设您使用的是命令行界面。

  1. 找到您想要的提交"开始"从(让我们说提交哈希是123abc
  2. 开始工作
  3. 创建一个指向该提交的分支(让我们称之为test) - git branch test 123abc
  4. 检查新分支 - git checkout test
    (您可以使用git checkout -b test 123abc
  5. 组合这两个步骤
  6. 使用git cherry-pick重新获得新的更改
  7. cherry-pick documentation

    您可以使用cherry-pick(引用文档)" 应用某些现有提交引入的更改"。

    在您的情况下,您现在可以简单地使用与此类似的命令:git cherry-pick 456def(其中456def是要应用其更改的提交的哈希值。)

    如果你想从主分支中选择最新的3次提交,你的命令可能看起来像cherry-pick那么git cherry-pick master~3..一系列的提交也是可能的。

    有关详细信息,请查看gitrevisions文档,或者另外查看Revision Selectionprogit book章节。