这是一个总的noob git问题,我意识到人们问了类似的问题,但我不知道该怎么办。我正在做一个项目,想尝试一下。它不起作用,现在我想回去。
在我开始实验时,我做到了这一点:
git branch实验
git checkout实验
然后我做了一堆东西。然后我试着回过头来看看:
git checkout develop
但我所有的实验性变化仍然存在。我可以回到早先的提交,但这会失去很多工作。
我意识到我应该在分支之前提交我的更改。所以,然后我在SourceTree中探索,试图了解我的项目处于什么状态。但现在我遇到了麻烦。根据SourceTree,最后一次提交是在12小时前。未提交的更改仅显示了我在8小时前做出的两个非常小的修改。我似乎已经失去了工作的最后8个小时。两个分支都是一样的。
我现在搞砸了吗?有没有办法可以让我回到分支的地步?谢谢。
答案 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 directory
或index
,因为新分支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
跟踪您的更改的两个最佳解决方案是:
在您的情况下,您可以在开始实验之前在虚拟分支上提交更改:
$ 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不知道它们。所以不幸的是,如果你无法从你在新分支上实际提交的更改中恢复它们,那么它们就会丢失。