GIT并推送忽略的文件

时间:2011-01-06 09:58:06

标签: git

使用git必须遵循的程序是什么?我会给我的程序(不知何故,工作得不顺利):

- cloned a repository: (works fine)
- added settings files to .gitignore to prevent overwriting the originial 
    settingfiles on the remote (= test environment)
- made changes to my local repository and committed it locally (works fine)
- pushed it from local to remote (did not work properly)

当推送到遥控器时,遥控器上的设置文件被删除,这导致我的测试环境死亡。我只是想要推送而不是删除设置文件。

我做错了什么/忘了?有什么想法吗?

3 个答案:

答案 0 :(得分:3)

据我所知,设置文件已经在您克隆的git仓库中进行了跟踪。这意味着即使您将其添加到.gitignore,它仍会被跟踪。

从历史记录中删除该文件,并确保将来忽略该文件

  • 将其添加到.gitignore(正如您已经做过的)
  • 运行git filter-branch --index-filter 'git rm --cached --ignore-unmatch settingsfile' HEAD

请注意,您需要为存在该文件的每个分支运行上述命令。

然后你需要git push -f origin master(如果master是分支的名称,origin是遥控器的名称

您可以参考this guide了解更多信息。

此外,正如Rafid K. Abdullah所说,你没有删除任何内容(如果你已经按照你在帖子中描述的工作流程);您刚刚添加了可以轻松还原的修改。这毕竟是git的意思:)

答案 1 :(得分:2)

我了解您所说的设置文件是您的设置而不是.git文件夹。如果我理解正确,那么将它们添加到.gitignore并不总是有效,因为.gitignore所做的就是当你使用'git commit -a','git diff'时它不会在本地检查这些文件。等等,但是如果你已经将它们放在本地存储库中,那么无论如何它们都会被推送到远程服务器。

话虽如此,我认为您在远程服务器上丢失了设置文件,因为您所做的只是添加更多提交,因此您必须在历史记录中找到设置文件。

不幸的是,不幸的是,与SVN不同,如果您只是学习使用GIT的几个步骤,那么您总是会犯错误。我在开始时犯了很多错误,然后承认我必须读一本关于它的书。但首先,想要理解它的概念,因为这有时会造成麻烦(例如'origin master'和'origin / master'之间有什么区别,等等。)所以我找到了这个非常有用的页面,我建议你读它:

http://www.eecs.harvard.edu/~cduan/technical/git/

我也找到了这本非常有趣的书:

http://progit.org/book/

您不必阅读所有内容,只需阅读基础知识,最重要的是分支。

希望有所帮助。

答案 2 :(得分:0)

请勿将设置文件添加到.gitignore文件,而是将更改保存到设置文件git stash do push&照常拉。完成后,使用git stash apply恢复设置文件。