我只关心 C++ 文件。(不用担心二进制文件、文本等内容...你可以假设所有的代码都是 C++ 代码)。
这些是我的分支:
* dev
master
现在,我可以创建一个名为"magic"的新分支,其中分支"magic"相当于"dev"(从生成的C++代码角度来看),但最小化了与主分支之间无用的空白行差异(例如插入额外的换行符)。
这个可行吗?
谢谢!
你的问题对我来说不是很清楚。我认为你想让新分支包含一系列提交,这些提交与dev中的提交“等效”,但不包含不必要的空格更改。
最简单的方法是使用git rebase --interactive
。这允许您手动编辑一系列提交。您可以使用git rev-list HEAD | tail -n 1
获取第一个(“根”)提交的哈希值。如果您也想编辑第一个提交,那就更难了,但是有一个SO答案可以解决这个问题。
git checkout dev
git checkout -b magic
git rebase --interactive $(git rev-list HEAD | tail -n 1)
这会在按时间正序排列的提交列表中打开一个编辑器。您可以将pick更改为希望更改的提交中的edit。Git然后会暂停处理这些提交之前,允许您使用git commit --amend
修改它,然后继续使用git rebase --continue
重新设置基础分支。当然,您可以运行脚本来清理文件,而不是手动编辑它们。如果要基于上一个提交的差异进行清理,则需要使用git cat-file blob HEAD ^:filename
来获取以前的版本,或者使用git diff HEAD ^ filename
。
如果要自动化整个过程,则可以使用git filter-branch --tree-filter script
。有关详细信息,请查看git-filter-branch的手册页面。
如果要防止未来的提交包含空格错误,则可以设置一个pre-commithook来禁止它们。
一旦您对新的magic分支感到满意,您可以使用它替换dev:
git branch -m dev dev-old
git branch -m magic dev
然而,需要注意的是这可能会给那些已经在自己的仓库中拥有dev副本的人造成问题。此时最好进行合并操作。
git diff --ignore-space-change ...
git diff --ignore-space-change ...
post-merge
hook,它将会:
post-merge
hook不能直接影响git merge
的结果)