12

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

这是我的设置,

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

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

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

git status -s

它显示带有 M 的主文件。

谁能向我解释未提交的更改如何反映在主分支中?

4

2 回答 2

9

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. 如果你不提交并尝试 checkout feature,那么 Git 将打印一条适当的消息,并保持master分支签出:

    git checkout feature
    

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

于 2013-09-11T07:17:39.693 回答
0

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

于 2013-09-11T06:43:35.277 回答