Git忽略全局已经提交的文件

  • 本文关键字:提交 文件 全局 Git git
  • 更新时间 :
  • 英文 :


我有一个Ruby on Rails项目,每次我写config.log_level = :errorconfig/environments/development.rb。但我不能做承诺,我只想做局部的。有时,当有很多文件被更改时,我不小心提交了文件,我需要经历撤消上次提交并重置开发的痛苦。rb文件。

所以我创建了一个全局gitignore文件来忽略config/environments/development.rb:

$ echo 'config/environments/development.rb' >> ~/.gitignore
$ git config --global core.excludesfile ~/.gitignore

这只适用于新创建的config/environments/development.rb,而不适用于提交的文件。在我的例子中,执行了config/environments/development.rb。所以解决方案似乎是这样的:

git rm --cached 'config/environments/development.rb'

但似乎我必须现在提交文件,否则,它说文件已被删除,如下所示:

Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted:    config/environments/development.rb

就我而言,我不能做这样的事,因为组织不允许这样做。


所以我试着用:

保存文件
$ git update-index --no-assume-unchanged config/environments/development.rb

这不是一个全局解决方案,但适用于局部。我仍然对这个解决方案感到满意。但似乎当我做git stash现在,它成功地隐藏持有的文件,但git stash pop不恢复文件。藏匿对我来说很重要。我必须做很多重基,并且在分级更改时经常在分支之间切换。


然后我尝试将条目添加到.git/info/exclude,这也不是一个全局解决方案。但是它也不能在已经提交的文件上工作。


是否有一种方法可以全局忽略现有和提交的文件?

到目前为止,这是一个非常粗糙的解决方案。我使用以下命令全局忽略文件:

$ echo 'config/environments/development.rb' >> ~/.gitignore
$ git config --global core.excludesfile ~/.gitignore

然后我删除缓存:

$ git rm --cached config/environments/development.rb

现在显示如下:

Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted:    config/environments/development.rb

然后我添加并提交了我在阶段开发中拥有的所有文件。

$ git add .
$ git commit -m "Doesn't matter"

然后重置上次提交:

$ git reset HEAD~

现在的发展。rb变化在那里,但git status不会显示它。当stash删除更改时,它仍然会在git stash pop运行时将更改带回来。

现在,这都是本地的,你应该忍受每次克隆同一个repo时这样做的痛苦。所以一个shell别名可以工作。

同样,这是一种非常粗糙的方式,但希望得到更好的答案。

最新更新