当我切换分支时,Git正在删除一个被忽略的文件
我有一个分支(我们称之为B)忽略了某个文件,而在其他一些分支(例如分支a)中没有忽略该文件。当我从分支B切换到分支A,然后再次切换回B时,文件已被删除 这正常吗?我可以看到它是如何发生的,从某种意义上说,分支B认为它不在那里,分支A认为它在那里,所以当我回到B时,它会“收拾它”。但这有点烦人当我切换分支时,Git正在删除一个被忽略的文件,git,Git,我有一个分支(我们称之为B)忽略了某个文件,而在其他一些分支(例如分支a)中没有忽略该文件。当我从分支B切换到分支A,然后再次切换回B时,文件已被删除 这正常吗?我可以看到它是如何发生的,从某种意义上说,分支B认为它不在那里,分支A认为它在那里,所以当我回到B时,它会“收拾它”。但这有点烦人 有什么建议吗?这很正常,不过我对其中的一步有点惊讶 当您从B切换到A时,git看到文件必须更新以匹配A的版本,并且会以静默方式进行更新,因为您忽略了它,表示就分支B而言,文件并不重要。它必须这样做-唯一的选
有什么建议吗?这很正常,不过我对其中的一步有点惊讶 当您从B切换到A时,git看到文件必须更新以匹配A的版本,并且会以静默方式进行更新,因为您忽略了它,表示就分支B而言,文件并不重要。它必须这样做-唯一的选择是拒绝签出分支A。(如果文件没有被忽略,它会拒绝,说“未跟踪的工作树文件”将被合并覆盖)。我真的很惊讶在这种情况下它也没有这样做。有人知道这是功能还是错误吗?) 当您切换回时,git发现分支B没有该文件,并将其删除。同样,它必须这样做。它无法读懂你的心思,并意识到一分钟前存在的被忽略的文件是你想要返回的文件——它只是给你分支B的内容,分支B表示该文件不存在
正如ewall在评论中所建议的那样,如果您想让文件在这些转换中幸存下来,则需要所有分支跟踪它,或者在所有分支中忽略它。因为唯一可行的解决方案是始终跟踪文件“
f
”,因此您可以仅在分支B
中添加一个带有:
在签出分支时B
:
- 涂抹过程将更改:
- 将
的内容保存在临时文件中f
- 将
的内容替换为一个f
文件(一个跟踪文件,对于分支fbis
,它将包含B
的f
内容)B
- 将
- 清洁进程将:
- 将
内容(在f
中修改)保存在B
中(fbis
在分支fbis
中通过B
修改提交)f
- 还原
内容(使用临时文件),意味着f
未提交(在f
中忽略)B
- 将
B
中添加一个,当从其他分支合并到B
时,该分支将保护FBI:合并驱动程序将始终保留
B
版本的fbis
内容,确保在签出分支B
时,被忽略的文件f
返回其内容
由于这些驱动程序(筛选和合并)未在其他分支中提交,因此文件“f”及其所有修改均在其他分支中提交。在分支
B
中,其内容将永远不会更改,但只要签出B
,对f
所做的“本地修改”仍将恢复
如果不需要进行内容恢复,则无需管理FBI只要保留筛选器驱动程序,您就可以确保无论您对分支
B
中的f
做了什么修改,这些更改都不会提交,实际上会忽略f
内容。我也经历过类似的情况,我会这样做:
我将调用在签出index.php时删除的文件
在分支A和分支B的.gitignore中,删除忽略index.php的行,然后在两个分支中提交.gitignore
在分支A中,创建index.php的备份,删除该备份并提交
在分支A中从先前创建的备份中恢复index.php,并在.gitignore中再次忽略index.php并提交
在分支B中添加index.php,忽略.git中的文件忽略,提交并快乐。忽略git中的文件并不意味着它们不需要修改。您可以在git中签入和管理一个文件,并在
.gitignore
中忽略它 回答
如果仅忽略分支B
中的文件,而不忽略分支A
中的文件,则在从A
切换到B
时,无法防止该文件被删除
但是,从您的评论中,我看到您试图忽略两个分支中的文件,但它仍然被删除。它可能仍在A
中跟踪。转到分支机构A
和
已从索引中删除被忽略的文件
git rm --cached <file>
git-rm——缓存
如果将分支A
推入存储库,请小心。您可以在这些机器上拉动后添加文件
解释 我也有同样的问题。这就是我的遭遇:
test.json
曾在B
中跟踪李>
B
创建了一个分支a
(因此文件test.json
也在a
中跟踪)李>
B
中的文件test.json
。但是git将继续跟踪任何已经被跟踪的文件。为了停止跟踪该文件,我将其从索引git rm--cached foo/test.json
中删除B
中,则文件test.json
存在。如果我切换到A
它仍然存在。如果我签回B
它就不见了。所以我注意到了和你一样的情况:
我可以看到它是如何发生的,在这个意义上,分支B
认为它不在那里,分支机构A认为