Git - 在.gitignore中提交文件

15

我想提交和推送两个新文件,它们位于项目的.gitignore中列出的文件夹中。我认为我可以只更改.gitignore文件,但这样我就需要进行两次提交:一次提交以推送这两个新文件,第二次提交以重置.gitignore。如果可能的话,我想在一次提交中完成。

有没有办法提交并推送一个被忽略的特定文件?


你可以选择不提交 .gitignore 文件,这样它就不会被推送到远程仓库 :) - Anonymous Penguin
2个回答

44
你不需要修改 .gitignore 文件,你可以强制添加这些文件:
git add --force -- file1 file2
git commit -m "add previously ignored files"
git push

来自 git add 手册

-f
--force

允许添加被忽略的文件。

正如Jakub Narębski所指出的,即使这些文件仍然被.gitignore指令选择,它们也不再被忽略。


Tom Hart评论中问道:

请问在使用 --force 后是否有任何方法可以重新忽略文件?

为了让这些文件再次在工作树中被忽略,您需要记录它们从索引中删除的情况:

git rm --cached file1 file2
git commit -m "Remove files which should be ignored"
git push

.gitignore” 规则会在从索引中删除文件后(即在提交和推送步骤之前)生效。
推送操作会影响其他贡献者。
如果你只想 本地且临时地 忽略这些文件,请使用:
git update-index --assume-unchanged -- file1 file2

(正如我今天早些时候在“使用排除文件忽略已提交的GIT更改”中详细说明的那样)
正如Zeeker评论中所述:

目前,git没有提供一种机制来忽略每个克隆中已提交文件的所有更改。

所以:
  • git rm --cache将删除该文件(同时保留其先前的历史记录):file1或file2将不再可见,并将被忽略。
  • git update-index --assume-unchanged -- file1 file2不会删除文件,但不再检测本地修改。

1
请注意,被跟踪的文件不再被忽略。 - Jakub Narębski
2
有没有办法在使用“--force”后重新忽略文件? - TMH
谢谢,虽然我目前个人不需要这样做,但我可以想到一些用例,在这些用例中,我只需要提交一个文件,然后再忽略它。感谢您的快速更新 :) - TMH
我们如何对目录执行此操作?我得到了“fatal: unable to mark file <directory-name>”错误。我尝试使用“./*/directory/**”来处理所有文件。 - dko
我会暂时重命名 .gitignore,添加所需文件夹,然后恢复 .gitignore - VonC
显示剩余4条评论

3
git add -f /path/to/file

将强制添加文件,即使它在被忽略的目录中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接