我的答案使用git rebase了很多.如果您不熟悉变基,请务必先阅读本章git rebase
git cherry-pick Brebase -i A和交换C/d版本,挤压B + d在一起.git rebase -i B,将B标记为编辑并应用更改.
我们真的从你可能需要在包含对象的所有分支机构使用过滤器分支对象数据库中删除的对象.之后,reflogs可能需要一段时间才能过期.如果对象是安全敏感对象,您可能需要
git gc --aggressive --prune=tomorrow.在临Git的书中有一个章节删除对象.
随着git-filter-branch始终记住包括--tag-name-filter cat,看评论
如果所有的C都应该在B中,那么简单
git rebase -i BC用壁球标记它会将提交压缩在一起.
如果它涉及到更多(只有C中的一个文件需要进入B),我会将作业分成较小的步骤,可以按照上述步骤解决:
- 将提交C拆分为两部分:一部分(C.1)合并为提交B,另一部分(C.2)保持为新的"C".例如,从上面链接的Git Pro章节:
例如,如果要分割提交,则应为该提交指定"编辑":
Run Code Online (Sandbox Code Playgroud)pick fc62e55 added file_size pick 9824bf4 fixed little thing edit 21d80a5 added number to log pick 76b9da6 added the apply command pick c264051 Revert "added file_size"然后当你到命令行,你回复犯下并创建两个(或更多)新的.让我们说21d80a5修改了两个文件,file1和file2,你想将它们拆分成单独的提交.您可以在rebase将您放到命令行后执行此操作:
Run Code Online (Sandbox Code Playgroud)$ git reset HEAD^ $ git add file1 $ git commit 'first part of split commit' $ git add file2 $ git commit 'second part of split commit' $ git rebase --continue现在不是5次提交,而是6次.
- 重新绑定以合并提交B和C.1
| 归档时间: |
|
| 查看次数: |
951 次 |
| 最近记录: |