git意外地跟踪配置文件

以下面的情况为例:

  • 你不小心追踪并提交了一个配置文件
  • 每个开发环境都应该有自己特定的配置文件,所以你应该在git add之前有.gitignore
  • 你有一段时间没有意识到
  • 提交

    A - B - C - D - E
        |   |   |   |
        |      |  /
        | commits that accidentally track application config
        |
        commit to untrack & .gitignore config
        [finally you did the right thing... but too late?]
    

    如果您重置或重新选择C,D或E,它将覆盖配置文件。

    无论如何,通过对它们进行B提交来重写C-E?


    如果配置文件应该是未被跟踪的,那么最好通过E对未配置的配置文件进行提交,将其添加到gitignore等。如果配置有敏感信息,在这种情况下,它必须从任何提交repo中删除,你没有其他去但修改历史(GitHub的这个帮助页面谈论你如何做到这一点 - http://help.github.com/remove-sensitive-data/)

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


    如果作者都是你,并且你不需要保留受影响的提交日期(所有这些都是AE),那么它几乎是非常容易的,另一种方式将需要更多

    根据你的照片工作,我会在错误之前添加修订版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_ {AUTHOR,COMMITTER} _ {姓名,电子邮件,日期}的问题git cat-file -p显示您,如果您需要它,我会为您制作一个sed 。

    链接地址: http://www.djcxy.com/p/10687.html

    上一篇: git accidentally tracked config file

    下一篇: Database versions deployment. Entity Framework Migrations vs SSDT DacPacs