git意外地跟踪了配置文件

git意外地跟踪了配置文件,git,version-control,Git,Version Control,以以下场景为例: 您意外地跟踪并提交了一个配置文件 每个开发环境都应该有自己特定的配置文件,因此在git add 你很长一段时间都没有意识到 犯罪 如果您重置或选择回C、D或E,它将覆盖配置文件 是否有必要通过在配置文件上应用B提交来重写C-E?如果配置文件应该只是取消跟踪,最好在取消跟踪配置文件的基础上进行提交,将其添加到gitignore等。如果配置有敏感信息,在这种情况下,必须将其从repo的任何提交中删除,除了修改历史记录,您别无选择(GitHub的这个帮助页面讨论了如何做到这一点-

以以下场景为例:

  • 您意外地跟踪并提交了一个配置文件
  • 每个开发环境都应该有自己特定的配置文件,因此在
    git add
  • 你很长一段时间都没有意识到
犯罪 如果您重置或选择回C、D或E,它将覆盖配置文件


是否有必要通过在配置文件上应用B提交来重写C-E?

如果配置文件应该只是取消跟踪,最好在取消跟踪配置文件的基础上进行提交,将其添加到gitignore等。如果配置有敏感信息,在这种情况下,必须将其从repo的任何提交中删除,除了修改历史记录,您别无选择(GitHub的这个帮助页面讨论了如何做到这一点-)


由于Git的性质和要求,您不能对提交进行更改,使其看起来是相同的提交。

如果作者都是您,您不需要保留受影响提交的日期(所有提交都是a-E),那么这几乎是很简单的,另一种方法需要更多的时间

根据您的图片,我将添加修订版F作为错误前的提交。假设你在“大师”分支上

git log --oneline master~6..master
应该给你看那些修订

git branch corrected master~5   # this is F, master~0 is A i.e. the branch tip

git config advice.detachedhead false  # just to get it to stop blabbing at you

# make corrected commit E
git checkout master~4
git rm --cached yourconfigfile
echo ref: refs/heads/corrected >.git/HEAD
git cat-file -p master~4 | sed 1,/^$/d | git commit -m-

# make corrected commit D
git checkout master~3
git rm --cached yourconfigfile
echo ref: refs/heads/corrected >.git/HEAD
git cat-file -p master~3 | sed 1,/^$/d | git commit -m-

# ... repeat for C, B, and A
最后,

echo ref: refs/heads/master > .git/config

你完成了。保存作者/日期信息需要从标题
GIT cat file-p
中设置GIT{author,COMMITTER}{NAME,EMAIL,date},如果您需要,我会为您制作一个sed。

谢谢您的评论。您将如何修改历史记录?听起来像是使用了可怕的
rebase
命令——我是git新手,所以举个例子就好了。
echo ref: refs/heads/master > .git/config