【发布时间】:2016-03-12 10:18:38
【问题描述】:
我有一组提交,比如从提交 A 到提交 Z。那组更改了存储库中的一组文件。这就像该功能的开发历史,经历了很多尝试和失败。
现在我想清理历史记录,减少提交次数并从历史记录中删除错误尝试。我想保持我当前的开发分支不变,并在另一个名为 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用于完整提交,而不是单个文件。)如前所述,squashes 可能更合适(和/或git cherry-pick -n)。 -
@torek:谢谢。我认为
git apply是我需要的。