应用了大规模的代码更改后,对几乎每个文件进行了格式化处理。
一个提交
我最终得到了大量冲突。我不想聪明绝顶,只是想最终到达与
A --------- B
一个提交
B
合并了这两个操作,导致巨大的差异,难以审查,手动进行交互式重新基础和挑出 hunk 进行拆分也很困难。但是,我可以通过在检出 A
并对其运行代码格式化程序来轻松构造一个中间提交 I
。A --------- B
\
\
-- I
假设我刚刚提交了 I
,如何轻松生成一个提交 B'
,使其与提交 B
具有完全相同的树内容?
A --------- B
\
\
-- I --- B' # (has exact same contents as B)
如果我天真地这样做
git checkout B
git rebase I
我最终得到了大量冲突。我不想聪明绝顶,只是想最终到达与
B
相同的目录,并假设 I..B
的差异将比 A..B
显著更小。
git checkout I && git checkout B -- . && git commit -m "Copy of B"
- phdI
但不在B
中的文件留在提交记录中。如果要删除这些文件,您可以在checkout
之间插入git rm -rf --cached .
命令;这将从提交中删除这些文件,但是它们仍会留在工作目录中,需要使用其他方式(例如git clean
)从工作目录中删除。 - j6t