git copy分支内容来掌握

时间:2017-07-25 23:52:29

标签: git git-merge

我有一个git项目,稳定版本总是存储在master分支中。 有一段时间我在一个单独的分支v20中使用2.0版。

现在我决定将其释放并再次将所有内容复制到master分支。 我不想合并它,因为有数百个相互冲突的变化,很多文件需要人工干预。

我只想制作一个v20分支的快照并将其放到master而不影响旧的历史记录,没有rebase(因此其他用户也不会受到影响)。只是为了让它看起来像只有一个新的提交带来了所有的变化。

开始状态:

 master branch --------- v20 branch
       |                     |
 master files ---------  v20 files
       |                     |
master_history          v20_history

目标状态:

 master branch --------- v20 branch
       |                     |
   v20 files   --------  v20 files
       |                     |
master_history          v20_history
+ commit from v20

有没有现成的git方法呢?

1 个答案:

答案 0 :(得分:3)

您正在描述git merge -s theirswhich does not exist, and one of the main Git authors insists that it should not exist:的结果。引用该链接(这些不是我的话):

  嘿,现在你有一些阅读要做; - )

     

在描述-Xours-Xtheirs时,我尽量不要过于消极   在那里,但实际上我认为" -s他们的"更糟糕的是。这是你的方式   会抛弃你所做的事情(也许是因为对方有更好的表现   解决方案比你的黑客),但这可以更容易和干净   完成:

$ git reset --hard origin
     

有些人可能会说"但是如果'合并他们的',我可以保留我所做的,   太&#34 ;.重置只是放弃了我的所作所为。

     

这种逻辑也存在缺陷。你可以改为:

$ git branch i-was-stupid
$ git reset --hard origin
     

如果你真的想记录你的失败。

     

一个大问题" -s他们的"与上面相比,#34;重置为原点,   丢弃或搁置失败的历史记录"是你的主人'   您的进一步发展所基于的历史将使您失败   如果你做了他们永远的废话" -s他们"。希望你会成为一个   随着时间的推移更好的程序员,你最终可能有一些值得的东西   与主分支顶端附近的世界分享。当那个   但是,你不能提供你的主分支   上游,因为更广泛的世界将不会对你的早期感兴趣   完全没错。

你可以随意与Git人员不同意并继续使用Is there a "theirs" version of "git merge -s ours"?的一些答案。请注意,接受的答案根本不是真正的-s theirsMichael R's answer使用git read-tree--no-commit合并期间切换索引是正确的。

mayo's comment中的方法也很好,而另一个SO问题的jthill's answer也是正确的。

你的情况与上面描述的情况略有不同,但实际上,你可以重命名" bad"分支并重命名" good"分支到master并从那里继续。任何人"下游"从你那里需要同样的重命名,因此需要考虑多个要点。