我有一个主题分支(关master
)有很多变化。在本主题分支的历史中,对某个文件进行了大量更改。如何在我的主题分支的历史记录中删除对此文件的所有更改?
附加说明:
git filter-branch
以某种方式使用它吗?答案 0 :(得分:4)
使用git filter-branch
:
$ git checkout topic-branch
$ git filter-branch --index-filter 'git checkout master -- myfile' master..HEAD
答案 1 :(得分:0)
将树重新分支到分支的开头。使用属性为该特定文件确定不同的合并策略,特别是'merge.ours'(始终保留我们的文件)。这个帖子解释了如何:tell git to use ours merge strategy on specific files(问题本身告诉你如何去做,答案只是提问者有的问题)。
我不知道这是多么“乏味”,例如你是否必须在每次提交时确认一些事情,因为我还没有这样做。但我想不会。
答案 2 :(得分:0)
做一个互动的rebase。繁琐的版本是简单地编辑/修改删除更改的每个提交:
git checkout topic-branch
git rebase -i master
# set all commits to edit
# for every commit; do
git show --stat
# if myfile is not changes: git rebase --continue
# copy the commit message
git reset HEAD^
git reset myfile
git checkout myfile
git commit
# paste in commit message
git rebase --continue
# ...until we are done
略微改进的版本是使用git log master.. myfile
并仅编辑列出的提交。