为什么分支中未提交的更改会影响主分支?

时间:2013-09-11 06:24:49

标签: git git-branch

我是git的新手,我正在尝试用它来理解概念,特别是分支和合并。

所以这是我的设置,

我有一个主分支,我用'master'文本创建一个主文本文件 现在我做git checkout -b branch并创建一个分支 我编辑分支“父”文件并添加一行文本。

现在,如果我提交此更改并切换回master,它将不会影响,因为分支更改不应反映在主分支中。

但是如果我将分支保留为未提交并切换到master,则此更改反映在那里,git将主文件视为已编辑,当我这样做时

git status -s

它显示带有M。

的主文件

有人可以向我解释未提交的更改如何在主分支中反映出来吗?

2 个答案:

答案 0 :(得分:5)

Git在检查另一个分支时保留您未提交的更改,这非常实用。

您可以将此视为未提交的更改“仅属于”您的工作副本,而不属于任何分支或提交。他们是独立的。当您在分支中提交更改时,如果结帐具有不同的文件版本,它们当然会更改。

此行为的唯一例外是,如果分支更改将未提交的文件带到其他版本,则取消结帐的情况如下:

A--B - feature
 \
  -C - master

假设feature分支中的提交B将一行更改为foo.txt,并且您已检出master分支。您对foo.txt进行了不同的更改。

  1. 您在master和结帐feature

    中提交了更改
    git add foo.txt
    git commit -m "changed foo.txt"
    git checkout feature
    

    此处没有问题,更改记录在master中,当您转到feature foo.txt时也会相应更改。

  2. 如果您未提交并尝试签出feature,那么Git将打印相应的消息,并保持master分支签出:

    git checkout feature
    
      

    错误:您对以下文件的本地更改将被覆盖   通过结帐:
      foo.txt的
       请提交您的更改或存储它们   在你可以切换分支之前。中止

答案 1 :(得分:0)

在Git或任何版本控制系统中,所有合并操作都将在本地计算机上完成。因此,如果您在任何分支上有任何未提交的更改,以便它们不会丢失/不被注意,则它们将与分支刚刚切换/新结帐合并。除非您使用git push,否则您的更改将始终存在。当然,也可能存在相反的情况,但对程序员来说往往更有利。