Git merge:从“他们的”分支中取出一切

时间:2013-02-06 14:44:12

标签: git merge branching-and-merging git-merge

我有两个分支,“私人”和“公共”。我在私人和定期工作,我想替换“公共”分支中的所有内容,以便在“私人”中拥有一份干净的文件副本。

由于我不希望“私有”的历史记录变为“公共”,我使用git merge --squash,但我仍然手动逐个解决合并文件。有更好的方法吗?

2 个答案:

答案 0 :(得分:8)

我认为

git merge -X theirs private

正是您要找的。当然,您可以随意添加--squash

答案 1 :(得分:3)

如果在提交的两个文件中相同的行都发生了变化,那么压缩合并不会改变冲突的事实。

要完全放弃“公共”分支的所有内容并接管“公共”的确切状态,您可以执行以下操作之一:

  1. 使用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. 手动检查“他们的”一面:
    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”完全相同的内容

  3. 修改:请注意,这是How do I 'overwrite', rather than 'merge', a branch on another branch in Git?

    的倒置情况

    编辑2 :如果您想要隐藏单个公开提交,当然也可以在此处使用--squash开关(步骤1.b和2.b,分别地)