Git合并:从“theirs”分支获取所有内容

13

我有两个分支,"private"和"public"。我在"private"上工作,并且定期地,我想要替换"public"分支中的所有内容,以便拥有"private"文件夹中的干净拷贝。

由于我不想让"private"的历史记录进入"public",所以我使用git merge --squash,但我仍然需要逐个手动解决合并文件。有更好的方法吗?


可能是重复的问题(或者更确切地说,可能已经有答案了):https://dev59.com/eUrSa4cB1Zd3GeqPZ-Go - Nevik Rehnel
看起来是相似的问题,但是答案是错误的。"ours" 实际上是反过来的,丢弃私有的内容而保留公共的内容。我想要的是像 --strategy="theirs" 这样的东西,但这不是一个合法的选项。 - Fred Yang
1
可能重复的问题:git merge -s ours,theirs怎么办? - user456814
2个回答

16
我觉得。
git merge -X theirs private

这就是你要找的。当然,你可以像你想要的那样添加--squash


9
合并时压缩不会改变冲突事实,如果提交的两个文件中相同行发生了更改,则会存在冲突。
为完全丢弃“public”分支上的所有内容并接管“public”的精确状态,可以执行以下操作之一:
1. 使用ours合并策略(而不是策略选项),如其他提交中所指出的: 1.a 假设您在“private”分支上(否则,请执行git checkout private) 1.b git merge -s ours public 1.c git checkout public 1.d git merge --ff-only private 1.e (可选:现在两个分支都指向合并提交;如果要使“private”指向合并前的提交,请执行:)git checkout private; git reset --hard private@{1} (注意,这使用了reflog,并且只有在此期间没有更改“private”时才能这样工作)
2. 手动检查“theirs”侧: 2.a 假设您在“public”分支上(否则,请执行git checkout public) 2.b git merge --no-commit private 将准备一个合并提交,但无论是否存在合并冲突,都会在提交之前停止 2.c git checkout -f private -- . 以检出“private”的当前状态 2.d git add . 标记冲突为已解决(如果有) 2.e git commit 保存合并提交;“public”现在具有与“private”完全相同的内容。
注意:这是如何在Git中覆盖而不是合并另一个分支上的分支的倒置情况。 注意2:如果要隐藏public的单个提交,当然也可以在步骤1.b和2.b中使用--squash开关。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接