插入提交而不合并

时间:2012-06-26 23:51:47

标签: git

我目前情况

A ----- D
 \
  B - C (master)

现在我想插入D提交而不合并,例如不更改 future 的内容提交BC

基本上重写B提交的父级(以及上游的所有其他提交)。

最后我想没有人工互动:

A - D - B - C

3 个答案:

答案 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

这使得所有提交内容(文件和文件夹)保持不变。