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

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

我刚刚遇到了一个对我来说似乎不合逻辑的情况。我有一个包含大量提交的仓库,因此目前它只有一个分支(掌握)。

主分支

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

git checkout iss53

现在模式如下所示:

新分行

好的,我已切换到分支iss53,我跑ls -l了,我的文件.txt. 其中一个变化是删除我的文件.txt文件,因此:

git rm MyFile.txt

很好,ls -l再次运行表明没有我的文件.txt所以我又回到了掌握分支:

git checkout master

但...我的文件.txt文件也消失了。我的逻辑是,如果我删除了分支上的文件,它应该应用仅有的到那个分支,那么为什么文件从掌握分支呢?请注意,我还没有做任何提交,只是分支而已。

笔记:两张图片均来自Git 源码

答案1

答案就在你的问题里:

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

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

git reset --hard HEAD

因此该文件将被再次恢复。

也许这对你来说不合逻辑,但这种行为很有用。想象一下,你有两个分支:masterdevelopmentdevelopment在将更改移至之前,你应该始终在 上工作master。假设你development在开始工作之前忘记切换到 ,然后在提交之前,你意识到自己在 上master。解决方案很简单,只需切换到development然后提交。

答案2

每当我从我的一个分支(我称之为登录)中删除一个文件时,它都不会将其从主分支中删除。

  1. 我切换到了登录分支git checkout login
  2. 删除了 test.html 文件git rm --cached test.html
  3. 已将所有内容添加到暂存区git add .
  4. 使用以下方式提交更改git commit -m 'removed test.html file'
  5. 使用以下代码将本地仓库推送到 Github 远程仓库:git push

相关内容