我有一个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方法呢?
答案 0 :(得分:3)
您正在描述git merge -s theirs
,which 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 theirs
。 Michael R's answer使用git read-tree
在--no-commit
合并期间切换索引是正确的。
mayo's comment中的方法也很好,而另一个SO问题的jthill's answer也是正确的。
你的情况与上面描述的情况略有不同,但实际上,你可以重命名" bad"分支并重命名" good"分支到master
并从那里继续。任何人"下游"从你那里需要同样的重命名,因此需要考虑多个要点。