解释Git结帐如何工作

时间:2013-09-09 01:44:36

标签: git

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

我正在玩分支,我到了测试git checkout命令的地步。据我所知,checkout命令允许从一个分支切换到另一个分支。同样根据我的理解,如果工作目录是脏的(即具有非分段编辑),checkout命令不允许您从一个分支切换到另一个分支。

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

我在我的功能分支上(目前这两个文件现在都有完全相同的内容),如果我编辑index.html的内容,比如标题标签,我没有上传它,如果我发出命令{ {1}},Git允许我切换到主分支,更有趣的是,如果我在主分支中发出git checkout master命令,我在功能分支上进行的非分段更改被复制到主分支。这不是破坏性的吗?

让我更困惑的是,在给定时间内,如果我在功能分支和编辑内部,分支,主分支和功能分支上的2个文件都没有相同的内容git status文件的内容,比如标题标签,现在,如果我发出index.html命令,它不允许我进行切换,因为它检测到我的工作树或目录是脏。

根据这些事件,我注意到,如果你有2个文件具有相同的内容,如果你在一个分支中,修改该文件的内容,并结帐到那个其他分支,Git允许你制作切换,Git携带您对该目标分支所做的未分级更改。

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

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

1 个答案:

答案 0 :(得分:3)

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

为防止数据丢失,git checkout如果需要更改包含非分段更改的文件,则会出错。

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