没有提交的git Branch - 还原更改

时间:2016-06-07 06:06:32

标签: git

这是一个总的noob git问题,我意识到人们问了类似的问题,但我不知道该怎么办。我正在做一个项目,想尝试一下。它不起作用,现在我想回去。

在我开始实验时,我做到了这一点:

   git branch实验
git checkout实验

然后我做了一堆东西。然后我试着回过头来看看:

  

git checkout develop

但我所有的实验性变化仍然存在。我可以回到早先的提交,但这会失去很多工作。

我意识到我应该在分支之前提交我的更改。所以,然后我在SourceTree中探索,试图了解我的项目处于什么状态。但现在我遇到了麻烦。根据SourceTree,最后一次提交是在12小时前。未提交的更改仅显示了我在8小时前做出的两个非常小的修改。我似乎已经失去了工作的最后8个小时。两个分支都是一样的。

我现在搞砸了吗?有没有办法可以让我回到分支的地步?谢谢。

2 个答案:

答案 0 :(得分:0)

是的,你被搞砸了,但好的是你会从这个错误中吸取教训。当您使用Git时:频繁commit和切换上下文时stash

在您的示例中,您进行了一些更改,例如您修改了foo并创建了bar。您可以在实验开始前看到更改:

$ git status
On branch master
Changes to be committed:
        new file:   bar    
Changes not staged for commit:
        modified:   foo

此时如果你创建一个新的branch并启用它,我就不会修改任何内容working directoryindex,因为新分支experiment点与主人master完全相同的提交。

$ git checkout -b experiment
A       bar
M       foo
Switched to a new branch 'experiment'

$ git status
On branch experiment
Changes to be committed:
        new file:   bar    
Changes not staged for commit:
        modified:   foo

所以,如果你做出改变,你将从这里失去以前的工作。也就是说,这并不完全正确,因为bar在索引上(执行git status时为绿色)。如果您修改了bar您的工作目录上的更改通知,但之前的版本仍保留在索引中:

$ echo "bar" >> bar
$ git status
On branch experiment
Changes to be committed:
        new file:   bar
Changes not staged for commit:
        modified:   bar
        modified:   foo

跟踪您的更改的两个最佳解决方案是:

  1. 经常在虚拟分支上提交。
  2. 使用git stash在上下文之间切换。
  3. 在您的情况下,您可以在开始实验之前在虚拟分支上提交更改:

    $ git checkout -b previous_changes 
    $ git commit -am "Something I want to keep"
    $ git checkout -b experiment head@{1}
    do some changes...
    

答案 1 :(得分:0)

  

我意识到我应该在分支之前提交我的更改。

是的,当您有未提交的更改并切换到新分支时,那些未提交的更改将被转移,并且当您在新分支上时仍然存在。由于它们未提交,因此这些更改不属于分支甚至存储库,因此您无法恢复这些更改。

如果您继续在新分支上工作,您最终修改了这些更改,甚至可能已提交或还原它们。在这一点上,他们迷失了。

从未添加到存储库的更改不属于存储库,Git不知道它们。所以不幸的是,如果你无法从你在新分支上实际提交的更改中恢复它们,那么它们就会丢失。