想象一下,我们有两个存储库,其中正在开发相同的软件。一个是发送给客户的遗留版本,错误正在得到修复等等。而另一个是对同一软件的所有如此辉煌的重写,其中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"
答案 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转换为空提交,并保留所有内容。