如何使用git rebase清理复杂的历史记录

如何使用git rebase清理复杂的历史记录,git,merge,rebase,Git,Merge,Rebase,在我的笔记本电脑、工作台和家里的台式机上,我与六家不同的分支机构和合并机构一起工作了几个星期之后,我的历史变得有点复杂。例如,我只是进行了一次提取,然后将master与origin/master合并。现在,当我执行git显示分支时,输出如下所示: ! [login] Changed domain name. ! [master] Merge remote branch 'origin/master' ! [migrate-1.9] Migrating to 1.9.1 on Heroku

在我的笔记本电脑、工作台和家里的台式机上,我与六家不同的分支机构和合并机构一起工作了几个星期之后,我的历史变得有点复杂。例如,我只是进行了一次提取,然后将master与origin/master合并。现在,当我执行git显示分支时,输出如下所示:

! [login] Changed domain name. ! [master] Merge remote branch 'origin/master' ! [migrate-1.9] Migrating to 1.9.1 on Heroku ! [rebase-master] Merge remote branch 'origin/master' ---- - - [master] Merge remote branch 'origin/master' + + [master^2] A bit of re-arranging and cleanup. - - [master^2^] Merge branch 'rpx-login' + + [master^2^^2] Commented out some debug logging. + + [master^2^^2^] Monkey-patched Rack::Request#ip + + [master^2^^2~2] dump each request to log .... ! [登录]已更改域名。 ! [master]合并远程分支“源/主” ! [migrate-1.9]在Heroku上迁移到1.9.1 ! [rebase master]合并远程分支“源/主” ---- --[master]合并远程分支“源/主” ++[master ^2]进行一些重新安排和清理。 --[master ^2^]合并分支“rpx登录” ++[master ^2^^2]注释掉了一些调试日志记录。 ++[master^2^^2^]猴子配线架::请求#ip ++[master ^2^^2~2]将每个请求转储到日志 .... 我想用git rebase清理一下。为此,我创建了一个新分支rebase master,并在该分支上尝试了git rebase。但是,我必须解决许多冲突,分支基础母版上的最终结果不再与母版上的相应版本匹配,该版本已经过测试并正常工作

我以为我在某个地方找到了解决办法,但再也找不到了。有人知道怎么做吗?或者当我开始删除我已经合并的不需要的分支时,这些复杂的ref名称会消失吗


我是这个项目的唯一开发者,所以没有其他人会受到影响

对于回购,可以强制推送分支(用rebase在本地创建的新分支替换远程历史)的正常过程是:

git rebase --interactive
但同样,只有当你是唯一一个退出回购协议的人时,这才是有效的,即使这样,你也必须将一些本地分支重新初始化为已重写的新远程跟踪分支


从rebase会话中,您可以获得所需的历史记录。

清理复杂历史记录的最佳方法是保持历史记录的线性。您可以通过避免除快进之外的任何类型的合并来做到这一点

工作流程是这样的

$ git checkout -b foobranch
<do stuff>
$ git commit
<do stuff>
$ git commit
...
现在,将分支合并到master中。这将是一个快进合并

$ git checkout master
$ git merge foobranch
现在把工作推向上游

$ git push

另见,嗯。。。不用从遥控器拔出就足够了。您可以轻松地重新设置-i(或基本上任何东西)本地分支、远程分支、提交的基础哲学注释:历史变得错综复杂。这就是生活的事实。忘掉它。
$ git push