在 git 中删除分支中的文件意味着也将其从主分支中删除?

nKn*_*nKn 2 git branch

我刚刚遇到了一个对 Git 来说似乎不合逻辑的情况。我有一个有大量提交的 repo,所以在这个阶段它只有一个分支(master)。

主分支

假设这个分支有一个名为MyFile.txt的文件。现在我需要创建一个不同的分支,因为我想对几个文件进行一些更改,而且我不想直接做主分支,所以我运行:

git checkout iss53
Run Code Online (Sandbox Code Playgroud)

现在架构如下所示:

新分店

好的,我已经切换到分支iss53,我运行ls -lMyFile.txt。其中一项更改包括删除MyFile.txt文件,因此:

git rm MyFile.txt
Run Code Online (Sandbox Code Playgroud)

很好,ls -l再次运行显示不再有MyFile.txt。所以我切换回分支:

git checkout master
Run Code Online (Sandbox Code Playgroud)

但是... MyFile.txt文件也消失了。我的逻辑说,如果我删除分支上的文件,应适用到分支,那么为什么在文件被删除的分支呢?请注意,我还没有进行任何提交,只是分支。

注意:两张图片均来自Git-scm

Ham*_*bad 5

答案在你的问题中:

请注意,我还没有进行任何提交,只是分支。

如果您不提交,更改将始终保存在您的工作目录中。切换分支不会影响您的工作目录,工作目录也不会影响您的最后一次提交。您看到该文件已被删除,但实际上它仅从您的工作目录中删除。如果要清除更改并返回到上次提交,请使用以下命令:

git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)

所以文件将再次恢复。

也许这对您来说不是逻辑,但这种行为可能很有用。想象一下,您有 2 个分支 :masterdevelopment,并且development在将更改移动到 之前,您应该始终工作master。假设您development在开始工作之前忘记切换到,然后 - 在您提交之前 - 您意识到您正在使用master. 解决方法很简单,切换到development然后提交即可。