git - 在提交时强制提交有额外的父母
问题描述
这与我的另一个问题有关:Can't make a replacement ref "permanent"。需要明确的是,无论出于何种原因,git replace --graft
结合git filter-branch
不起作用。
我需要合并三个分支,但章鱼合并失败(文件太不相似)所以我全部手动完成(git show branch:file > file
然后启动meld
)。但是,历史很重要,所以我需要记录那branch
是父母。由于尽管按照 man 文件和 Stackexchange ( filter-branch
) 上的其他地方告诉我的操作,我仍无法使替换 refs 成为永久性的,因此我寻求替代方法。
从我现有的问题中可以看出,我的第一个想法是使用替换,但这并没有按预期工作(它们没有被“固定”)。同样git graft
似乎被建议不要。此外,如链接问题中所述,章鱼合并失败。浏览git commit --help
(手册页)一无所获。
请注意,我并不是要向旧提交添加额外的父母。我在尚未推送的分支的尖端,并且没有提交将这个作为父级。
解决方案
通过在较低级别查看此内容(DO 提交究竟是如何发生的),我发现了一个可爱的网页:https ://jwiegley.github.io/git-from-the-bottom-up/1-Repository/4-how -trees-are-made.html。
所以答案是手工完成。
git add file
git write-tree
echo "commit message" | git commit-tree -p branch_A -p branch_B -p branch_C $hash-from-previous-step
git update-ref refs/heads/branch_A $hash-from-previous-step #note I'm on branch_A
瞧!然后我可以编写一个简单的 shell 命令,将提交消息和其他两个分支(HEAD
用作第一个父级)作为输入。
为了它,我把它写成一个衬里。
git add file && git update-ref refs/heads/branch_A $(echo "commit message" | git commit-tree -p branch_A -p branch_B -p branch_C $(git write-tree))
推荐阅读
- python - Boto3 EC2.Client DescribeFleets 类错误“EC2”对象没有属性“describe_fleets”
- javascript - 无法在猫鼬中填充文章
- javascript - 是否可以在 React 中的功能组件内触发事件时打开另一个功能组件?
- mysql - Mysql合并两个varchar列删除重复词
- sql - 将现有数据附加到具有标识的表中
- angular - Bootstrap 4:TypeError:无法设置未定义错误的属性“emulateTransitionEnd”
- android - 在 Appwidget RemoteViews 中,用户强制停止应用程序后未调用 setOnClickPendingIntent
- objective-c - tkeclipse 不再支持 Objective-C 垃圾回收
- python - 在不执行代码的情况下获取 Python 函数的完全限定名
- python - 有条件地读取数据