我有一个主题分支(关闭master
)有很多变化。在此主题分支的整个历史中,某个文件发生了许多更改。如何在我的主题分支的整个历史记录中删除对此文件的所有更改?
补充说明:
- 请注意,该文件在创建主题分支之前就已存在。我不想删除文件本身。
- 我有几个解决方案,但到目前为止,它们似乎很乏味。我会将它们作为单独的答案发布。
- 可以
git filter-branch
以某种方式用于此吗? - 我的主题分支包含大约...说...60 次提交。
我有一个主题分支(关闭master
)有很多变化。在此主题分支的整个历史中,某个文件发生了许多更改。如何在我的主题分支的整个历史记录中删除对此文件的所有更改?
补充说明:
git filter-branch
以某种方式用于此吗?使用git filter-branch
:
$ git checkout topic-branch
$ git filter-branch --index-filter 'git checkout master -- myfile' master..HEAD
根据分支的开始重新设置树的基础。使用属性来确定该特定文件的不同合并策略,特别是“merge.ours”(始终保留我们的文件)。该线程解释了如何:告诉 git 对特定文件使用我们的合并策略(问题本身告诉你如何去做,答案只是提问者的一个陷阱)。
我不知道这有多“乏味”,例如您是否必须在每次提交时确认某些内容,因为我还没有这样做。但我认为不会。
做一个交互式变基。繁琐的版本将是简单地编辑/修改每个提交以删除更改:
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
并且只编辑列出的提交。