Git checkout 删除了本地排除的文件

问题描述 投票:0回答:1

我有一个包含多个“测试”文件的项目,我已将这些文件包含在 .git/info/exclude 文件夹中,以避免推送它们。 因为我想将这些文件备份在 git 中,所以我决定将它们放入一个新分支,如下所示:

git checkout -b newtestbranch
git add -f <path/to/test/folder/*>
git commit
git push --set-upstream origin newtestbranch
git checkout <mybranch>

执行此操作后,我强制提交到新分支的所有本地文件都在我的原始分支中被删除(虽然它们应该保留在排除文件夹中)。

我做错了什么?这是预期的行为吗? 我想问题是这些测试文件位于新分支的工作树中,而不是原始分支中,因此在结帐时它们被删除。有办法绕过这个吗?我尝试使用 sparse-checkout,但它不起作用。

注意:我在存储库中还有一些未跟踪的更改,我在执行此操作之前只是将其隐藏起来,然后又将其隐藏起来。

git git-branch gitignore
1个回答
1
投票

这是预期的行为:当您切换分支时,Git 会尝试使您的工作目录与您要切换到的分支的提交相匹配。如果您要切换到的分支的工作目录中的文件不存在于您要切换的分支中,Git 可能会删除这些文件。

您可以按照以下步骤操作:

  • 在切换到新分支之前,将更改存储在原始分支中:

    git stash
    
  • 创建新分支并添加/提交必要的文件:

    git checkout -b newtestbranch
    git add -f <path/to/test/folder/*>
    git commit -m "Add test files"
    
  • 切换回原来的分支:

    git checkout <mybranch>
    
  • 应用您之前创建的存储:

    git stash apply
    

    这将带回您未跟踪的更改。

您的工作目录应包含原始分支中的文件以及隐藏的更改。

© www.soinside.com 2019 - 2024. All rights reserved.