git rebase没有合并任何更改

时间:2013-10-31 14:29:34

标签: git git-merge git-rebase

想象一下,我们有两个存储库,其中正在开发相同的软件。一个是发送给客户的遗留版本,错误正在得到修复等等。而另一个是对同一软件的所有如此辉煌的重写,其中A中出错的所有内容现在都很棒且有光泽(正确......)。

所以时间过去,无论出于何种原因,我们认为重写是成功的。我们决定退出旧版软件。但是,我们希望保留它的历史(以防万一,你知道......),同时摆脱对两个存储库的需求。

让我们说Repository A看起来像这样:

      A---B---C 
     /         \
D---E---F---G---H---I master (A)

巧合的是,Repository B看起来像这样:

      S---R---Q
     /         \
K---L---M---N---O---P master (B)

所以,我们所要做的就是输入

[~/repo-a]$ git magic

并得到结果:

      A---B---C               S---R---Q
     /         \             /         \
D---E---F---G---H---I---K---L---M---N---O---P master (A)

然而遗憾的是,没有git-magic命令(完成我们想要的任务)。

到目前为止我尝试的是

a]

查看git-rebase合并策略ours的手册页似乎是我们想要的

  

我们

     

这解决了任意数量的头,但结果树的结果   merge始终是当前分支头的,有效地忽略   所有其他分支的所有变更。它意味着习惯   取代侧枝的旧发展史。请注意,这是   不同于-Xours选项到递归合并策略。

[~/repo-a]$ git remote add shiny-rewrite git@github.com/orga/shiny-rewrite.git
[~/repo-a]$ git fetch shiny-rewrite
[~/repo-a]$ git checkout shiny-rewrite/master
[~/repo-a]$ git checkout -b shiny-master
[~/repo-a]$ git rebase -s ours master
First, rewinding head to replay your work on top of it...
Already applied: 0001 initial commit
Already applied: 0002 blablabla
Already applied: 0003 …
Already applied: 0004 ZOMG IT'S READY
All done.

但是现在所有来自闪亮重写的提交都已消失。不完全是我们想要的。

B]

“蛮力”替代

[~/repo-a]$ git rm -r *
[~/repo-a]$ git commit -am "DELETE ALL THE THINGS"
[~/repo-a]$ git remote add shiny-rewrite git@github.com/orga/shiny-rewrite.git
[~/repo-a]$ git fetch shiny-rewrite
[~/repo-a]$ git checkout shiny-rewrite/master
[~/repo-a]$ git checkout -b shiny-master
[~/repo-a]$ git rebase master
[~/repo-a]$ git checkout master
[~/repo-a]$ git merge shiny-master

但是,现在我们有了这个删除提交..

      A---B---C                  S---R---Q
     /         \                /         \
D---E---F---G---H---I---X---K---L---M---N---O---P master (A)
                       /\
                       ||
             "DELETE ALL THE THINGS"

1 个答案:

答案 0 :(得分:0)

如果在插入K后挤压X和K,您将得到想要的。

我还通过挑选K制作了X,以便X压榨时保留K的提交者和日期。

if 'extended_tweet' in tweet: 
    print(tweet['extended_tweet']['full_text'])
else if 'text' in tweet:
    print(tweet['text'])

第3步将X转换为空提交,并保留所有内容。