git从历史logging中删除合并提交

我的Git历史logging如下所示:

Git的历史

我想把紫色的承诺压缩到一个单一的。 我不想在我的提交日志中再次看到它们。

我试图做一个git rebase -i 1 ,但即使蓝色分支上有1 (比较图片),我仍然看到我的紫色分支上的每一个提交。

我怎样才能完全删除紫色分支(从提交日志)?

git rebase -i <sha before the branches diverged>git rebase -i <sha before the branches diverged>这将允许你删除合并提交,并且日志将是你想要的一行。 您也可以删除不再需要的任何提交。 你之所以失业,是因为你没有回到过去。

警告:你正在重写这个历史。 这样做的变化已被推到远程回购将导致问题。 我build议只使用本地提交来执行此操作。

有两种方法可以根据你的需要来解决这个问题:

解决scheme1 :删除紫色提交,保存历史logging(如果您想要回退)

 git revert -m 1 <SHA of merge> 

-m 1指定要select哪个父行

紫色提交将仍然在历史上,但自从你已经恢复,你不会看到这些提交的代码。


解决scheme2 :完全删除紫色提交(如果repo共享,则会造成破坏性更改)

 git rebase -i <SHA before branching out> 

并删除(删除线)对应于紫色提交。

如果在合并之后没有提交,这将不那么棘手。 额外的提交会增加在revert/rebase期间发生冲突的可能性。

从原始状态的回购开始

原始回购历史

删除合并提交并将分支压缩到主线中的单个提交

强制提交,不合并提交

使用这些命令(将5和1replace为相应提交的SHA):

 git checkout 5 git reset --soft 1 git commit --amend -m '1 2 3 4 5' git rebase HEAD master 

要保留一个合并提交,但压缩分支提交到一个:

压扁提交,保留合并提交

使用这些命令(将5,1和Creplace为相应提交的SHA):

 git checkout -b tempbranch 5 git reset --soft 1 git commit --amend -m '1 2 3 4 5' git checkout C git merge --no-ff tempbranch git rebase HEAD master 

删除合并提交并将其replace为分支中的单个提交

分公司进入主线,没有合并提交

只要(用相应提交的SHAreplace5):

 git rebase 5 master 

最后,完全删除分支

分支完全删除

使用此命令(用相应提交的SHAreplaceC和D):

 git rebase --onto CD~ master