我有两个分支,“私人”和“公共”。我在私人和定期工作,我想替换“公共”分支中的所有内容,以便在“私人”中拥有一份干净的文件副本。
由于我不希望“私有”的历史记录变为“公共”,我使用git merge --squash
,但我仍然手动逐个解决合并文件。有更好的方法吗?
答案 0 :(得分:8)
我认为
git merge -X theirs private
正是您要找的。当然,您可以随意添加--squash
。
答案 1 :(得分:3)
如果在提交的两个文件中相同的行都发生了变化,那么压缩合并不会改变冲突的事实。
要完全放弃“公共”分支的所有内容并接管“公共”的确切状态,您可以执行以下操作之一:
使用ours
合并策略(不是策略选项),如其他几个提交中所指出的那样:
1.a假设你在分支机构“私人”(否则,做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,如果你在此期间没有改变“私人”,它将只会这样工作)
手动检查“他们的”一面:
2.a假设你在“公共”分支上(否则,git checkout public
)
2.b git merge --no-commit private
将准备合并提交,但在提交之前停止,无论是否存在合并冲突
2.c git checkout -f private -- .
检查“私人”的当前状态
2.d git add .
将冲突标记为已解决(如果有)
2.e git commit
保存合并提交; “public”现在将具有与“private”完全相同的内容
修改:请注意,这是How do I 'overwrite', rather than 'merge', a branch on another branch in Git?
的倒置情况 编辑2 :如果您想要隐藏单个公开提交,当然也可以在此处使用--squash
开关(步骤1.b和2.b,分别地)