使用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)
当推送到遥控器时,遥控器上的设置文件被删除,这导致我的测试环境死亡。我只是想要推送而不是删除设置文件。
我做错了什么/忘了?有什么想法吗?
答案 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/
我也找到了这本非常有趣的书:
您不必阅读所有内容,只需阅读基础知识,最重要的是分支。
希望有所帮助。
答案 2 :(得分:0)
请勿将设置文件添加到.gitignore
文件,而是将更改保存到设置文件git stash
do push&照常拉。完成后,使用git stash apply
恢复设置文件。