以下面的场景为例:
.gitignore
之前应该git add
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吗?
答案 0 :(得分:3)
如果配置文件应该只是未跟踪,最好通过E提交未提交配置文件,将其添加到gitignore等。如果配置有敏感信息,在这种情况下必须从repo的任何提交中删除,除了修改历史记录之外别无他法(GitHub的这个帮助页面讨论了如何做到这一点 - http://help.github.com/remove-sensitive-data/)
由于Git的本质和要求,您不能对提交进行更改并使其看起来像是一样的提交。
答案 1 :(得分:0)
如果作者都是你而且你不需要保留受影响提交的日期(所有这些,A-E),这将是非常简单的,另一种方式将需要更多
从你的图片开始,我会在错误之前添加修订版F作为提交。假设你在分支'master',
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} _ {NAME,EMAIL,DATE}从标题git cat-file -p
向您展示的问题,如果您需要它,我会为您做一个sed。