git:如何在HEAD之前进行重组

时间:2012-07-30 19:34:49

标签: git git-rebase

我不太了解如何使用rebase,但似乎rebase只是将起点更改为更近期的提交

在我的情况下,我在推送的分支 test 上做了一些事情,另一个人将更改B拉到了E 与此同时,我略微改变了一个提交,我删除了(坏主意)我的远程分支以重新创建具有相同提交的分支

所以因为这个现在它照顾合并:

A---B---C---D---E--F--G--H  master
 \--B'--C'--D'--E'/    test

B和B'是相同的,同时,相同的提交消息...,C,C'也,.. D和D',E和E'

除了git rebase -i之外还有其他解决方案,我尝试了但是你失去了其他分支合并历史记录

我实际上想要删除B,C,D,E,是否可以合并分支?

我无权推动远程主控,只能拉

我尝试修剪但是那些不必要的提交没有删除,因为它们指向其他人 如果可能的话,我真的想把主人A变成主人E'。

thx for tips

修改:否则,具有右推权的人怎么能永久地解决这种情况呢?

我可以通过

解决这个问题
git reset --hard A
git pull repo1 test (where test still is at E')
git rebase --onto F A master

但是如果管理员拉了它,我猜它会没有效果?,他应该在任何其他用户从这个烂摊子中拉出来之前自己动手操作吗?

1 个答案:

答案 0 :(得分:3)

在F处摆脱不需要的合并的最简单方法是create a grafts file并在那里添加一行<hash of F> <hash of E'>然后用gitk检查历史记录是否符合您的要求。如果所有看起来都是文件,那么下一步就是通过重写最近的提交来使移植永久化:git filter-branch --tag-name-filter cat -- <hash of A>..master最后用git push -f

强制推送重写的提交到存储库