从推送的提交中删除1个文件

时间:2013-12-27 23:11:47

标签: git github

我在GitHub上有私人回购。大多数是由config.php配置的。这个配置被排除在外是.gitignore,它可以正常运行,直到带有Egit的Eclipse被用作IDE。

Eclipse + Egit有一个不那么精彩的功能,即在提交时随机尝试包含被忽略的文件(并默认选中)。通常这可以被捕获和取消选中,但是当推送大的更改时很难找到,因为需要阅读并考虑很多文件(本月的第3个星期五:处理日志文件中的所有通知错误。通常由noob人)

所以在git中,我们有一个推送提交,其中包含很多修复,合法文件和一个config.php,如果推送到服务器会破坏数据库连接字符串/文件位置/ ftp凭证/ etc,用户本地测试配置。再次修改文件将不起作用,它仍然会更改服务器上的文件。我们所做的不应该导致更改或删除被推送到此文件中的服务器。

上一步是删除提交,然后在提交机器上删除:

git reset SOFT HEAD^

然后重新应用各个文件中的更改(不包括config.php),但最后一轮修复......好了提交包括142个文件!没有人有时间。

是否有通过github或git删除对config.php的更改或排除不会从目标服务器,用户计算机或存储库中删除或更改文件的方法? /强>

同样,该文件已被提交,推送(并且通过冲突在合并过程中被捕获)。我们不希望再次在上游,下游修改或删除此文件。大约每3个月就有一个新人或急速发生这种情况,所以我们计划经常使用这个程序。

(我以前在这里阅读的所有问题都不是专门针对这种情况,或建议重新执行142个文件中的每一个)

2 个答案:

答案 0 :(得分:1)

  1. 制作存储库的另一个副本
  2. 将该副本还原为旧版本
  3. 将旧版本的文件复制到存储库的原始副本
  4. 使用原始存储库副本执行您想要的操作,但它现在具有旧版本的config.php和其他所有版本的新版本。

答案 1 :(得分:1)

通过反转La-comadreja的进程从一个好的提交中“删除”一个坏文件(config.php)的过程。这保留了原始存储库,良好的更改,消除错误,并需要1个新分支。存储库:Repo1;分支:坏分支;我们将把想要的更改复制到Good-branch。

1: on Repo1: git checkout bad-branch
2: git log: and find the commit hash to revert to (#88888ABCDEF)
3: git branch Good-branch 88888ABCDEF (or HEAD~1 if one commit) to restart the changes with a clean slate in Good-branch
4: clone repository to Clone1
5: on Clone1: git checkout bad-branch
6: In OS, on Clone1, DELETE bad or unwanted file(s) (config.php, etc)
7: In OS, file copy remaining good files from Clone1/bad-branch, over top of Repo1/Good-branch (IE: copy all files in root directory and paste with over-write)
8: add and commit Repo1/Good-branch (will have all changes minus bad files)
9: delete Repo1/bad-branch just in case.
10: Clone1 can be deleted
11: restart the merge on Good-branch

任务时间:克隆存储库并复制文件的时间。我这是2分钟