4

我正在使用 Git 附带的默认 bash,我创建了一个 master 分支(不是裸的)并从中创建了一个分支(我们称之为 new_feature 分支)。

我正在玩分支,我到了我正在测试git checkout命令的地步。据我了解, checkout 命令允许从一个分支切换到另一个分支。同样据我了解,如果工作目录很脏(即有未暂存的编辑),则 checkout 命令不允许您从一个分支切换到另一个分支。

index.html现在,我的主分支和功能分支中都有一个文件。两个分支中的两个文件具有完全相同的内容。现在这就是我所做的,这让我感到困惑。

我在我的功能分支上(目前两个文件现在具有完全相同的内容),如果我编辑的内容index.html,比如标题标签,并且我没有暂存它,如果我发出命令git checkout master,Git 确实允许我切换到master 分支,更有趣的是,如果我git status在 master 分支中发出命令,我在 feature 分支上所做的未暂存更改将被复制到 master 分支。不是破坏性的吗?

让我更困惑的是,如果我在功能分支内并编辑index.html文件的内容,那么在给定时间,两个分支(主分支和特性分支)上的 2 个文件的内容不同标题标签,现在如果我发出git checkout master命令,它不允许我进行切换,因为它检测到我的工作树或目录是脏的。

底线,正如我基于这些事件注意到的那样,如果 2 个文件具有相同的内容,如果您在一个分支中,修改该文件的内容,然后签出到另一个分支,Git 允许您进行切换,并且Git 会携带您对该目标分支所做的未暂存更改。

但是如果 2 个不同分支上的 2 个文件有不同的内容,如果你在一个分支上,对那个文件进行了编辑,然后发出 checkout 命令切换到另一个分支,Git 不允许你进行切换,因为它检测到工作树很脏的某种原因。

我的理解是对还是错?我也可以用一点解释来解释为什么我的理解是错误的或正确的。

4

1 回答 1

4

未分阶段的更改根本不是 git 的一部分。
git checkout对不在 git 中的任何文件没有影响(无论它们是未暂存的更改还是 gitignored 文件)。

为防止数据丢失,git checkout如果需要更改具有未暂存更改的文件,则会出错。

换句话说,如果您有两个具有不同版本的文件的分支,并且您编辑该文件,然后尝试切换到另一个分支,您将收到错误,因为它将拒绝用另一个分支的版本替换您未暂存的更改.

于 2013-09-09T01:47:05.033 回答