我目前情况
A ----- D
\
B - C (master)
现在我想插入D
提交而不合并,例如不更改 future 的内容提交B
和C
。
基本上重写B
提交的父级(以及上游的所有其他提交)。
最后我想没有人工互动:
A - D - B - C
答案 0 :(得分:1)
您正在寻找的动作是rebase
,处于交互模式。
git checkout C
git cherry-pick D # Now: A - B - C -D
git rebase -i A
<reorder commits>
git log
--interactive / -i
选项会在您的编辑器中打开历史记录,让您可以随心所欲地混淆。你甚至可以将多个提交压缩在一起或完全消除一些提交。
如果你想要完全平凡,你也可以这样做:
git checkout A
git cherry-pick D B C
答案 1 :(得分:1)
批处理模式将在您当前分支历史记录中的内容上完成。在这种情况下,您要查看D的历史记录或主人的历史记录。最简单的方法是:
git rebase D
(假设你已经签出了主人)为什么你需要在批处理模式下完成这个?
答案 2 :(得分:1)
我想出了在不更改其内容的情况下(在提交SHA当然旁边)引入新提交到历史记录的正确方法是使用中间git移植。
在以下示例中,我假设没有先前的移植物:
# use a graft to temporarily change the parent of B to be D
echo "$SHA_B $SHA_D" > .git/info/grafts
# apply the grafts, changing the SHAs of the commits B...C
git filter-branch
# remove old pending commits
git gc
# remove the no longer needed grafts
rm .git/info/grafts
这使得所有提交内容(文件和文件夹)保持不变。