对git分支如何工作感到困惑

时间:2015-10-02 19:07:17

标签: git

我正在尝试使用Rails应用程序使用git。我为一个功能创建了一个新分支,搞砸了它,现在想从主分支重新开始。所以我git checkout master,在我在新功能分支中完成任何工作之前离开的分支。

根据我的阅读,我的印象是,通过这样做,我现在将在我的应用程序中工作,因为它是在新分支之前的最后一次提交,但所有文件仍然与它在我正在努力的新分支。新的功能模型,控制器,迁移等,一切仍然存在。我甚至没有提交新分支中的最后一个更改,但它们仍然显示在我认为应该来自之前master状态的文件中。

我的git安装是否出现故障或我错过了什么?在创建新分支之前,我究竟如何回到我所处的状态?阅读文档,我无法弄清楚我哪里出错了。

1 个答案:

答案 0 :(得分:3)

当您在分支机构之间切换时,您所做的任何未提交的更改都将在每个checkout之间进行转移。这是期望的git行为 - 通常您将开始处理master中的快速功能,意识到它应该获得自己的功能分支,然后使用git checkout -b my-new-branch创建一个新分支,这将带来你迄今为止所做过的任何工作而不承诺它。

这里有一些保护措施,例如,master中的更改会在您切换回主分支时影响您未提交的更改(“您有未覆盖的更改会被覆盖 - 请{ {1}}“消息。”

要解决此问题,假设您确实不想保留任何工作,只需在git stash分支内git checkout -- .进行操作,所有更改都将消失。< / p>

如果您想继续工作,请返回您已制作的分支,添加并提交文件,然后切换回master。你会发现它将处于适当的状态。

至于official docs

  

要准备处理master,请通过更新工作树中的索引和文件,并将HEAD指向分支来切换到它。 保留对工作树中文件的本地修改,以便将它们提交到<branch>

以及我对上述安全措施的解释(在<branch>选项下找到:

  

切换分支时,如果对当前分支与要切换的分支之间的一个或多个文件进行本地修改,则该命令拒绝切换分支以保留上下文中的修改。