我有一组提交,说从提交A到提交Z.该设置改变了存储库中的文件集。这就像是一系列尝试和失败的功能的发展历史。是`git diff`能够将diff应用于当前工作树吗?
现在我想清理历史,减少提交次数并从历史记录中删除错误的尝试。我想保留当前的开发分支,并在另一个分支中创建清理历史记录,例如feature-rc1
。稍后,这个分支将被合并到上游存储库中。
所以我的计划是对文件file1.cpp
进行所有更改并将这些更改应用于feature-rc1
分支的工作树。然后我会和file2.cpp
和file3.cpp
一样。然后我提交更改并继续处理其他文件和提交。因此,我的基本操作是这样的:
git diff A Z -- file1.cpp >temp.diff
patch -P1 <temp.diff
git diff A Z -- file2.cpp >temp.diff
patch -P1 <temp.diff
git diff A Z -- file3.cpp >temp.diff
patch -P1 <temp.diff
git commit -a -m "commit"
我的问题是,如果有可能避免使用临时差异文件和外部工具诸如patch
?如果git diff
具有将差异结果应用于当前工作树的内置功能,或者存在具有相同功能的另一个git命令,那将会非常好。
更新:我认为这是可能避免的临时文件是这样的:
git diff A Z -- file1.cpp | patch -P1
但是,这将是巨大的,避免patch
太:
git diff A Z -- file1.cpp | git ????
什么来代替在那里的
听起来像你在谈论压扁提交? –
是的,这是挤压,但在每个文件的基础上。 –
您正在查找的命令是'git apply'。 (另请参阅'git am',但'am'则用于完整提交,而不是单个文件。)如前所述,南瓜可能更合适(和/或'git cherry-pick -n')。 – torek