Git合并没有我问?为什么?

时间:2011-08-20 01:39:59

标签: git

我正在做主人,完成了我需要做的事情,然后做了

git commit -am "message".

我想测试写一个新功能,所以我做了:

git branch NewFeature

接着是

git checkout NewFeature

然后我对版本控制文件进行了更改,回到git并执行了

git checkout master

我忘记做的是将这些更改提交给NewFeature分支。我的错,是的,但环顾四周似乎应该没有-f标志就失败了。不幸的是,它只是将我的更改与master合并。当然,我吓坏了,做了

git reset --hard head

当我换回时,似乎我丢失了在NewFeature分支上完成的所有工作!我做错了什么?

2 个答案:

答案 0 :(得分:6)

这是正常行为。

如果分支之间没有相互冲突的更改,git会在您结帐时“移动”更改。 Git应该在结账后向您显示已移动文件的摘要。

执行git reset --hard HEAD会恢复您的更改。

更多信息

如果您有未提交的更改,但想要处理其他分支中的其他内容,则可以将更改存储以供日后使用。 See stash docs

  • git stash
  • git checkout <branch>
  • 进行更改并提交
  • git checkout <oldBranch>
  • git stash pop 取消隐藏

答案 1 :(得分:0)

您可能需要考虑查看“git reflog”以找出分支的状态,以便恢复您的更改。

但正如您所指出的,git reset --hard是一个更改工作树的操作,如手册页中所述:

       --hard
           Resets the index and working tree. Any changes to tracked files
           in the working tree since <commit> are discarded.

我在本周的每周Git提示系列中写了更多关于reflog的信息:

http://alblue.bandlem.com/2011/05/git-tip-of-week-reflogs.html