【问题标题】:Git merge: take everything from "theirs" branchGit合并:从“他们的”分支中获取所有内容
【发布时间】:2013-02-06 14:44:12
【问题描述】:

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

由于我不希望“私人”的历史转到“公共”,我使用git merge --squash,但我仍然手动一个一个地解决合并文件。有没有更好的方法来做到这一点?

【问题讨论】:

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


【解决方案1】:

我认为

git merge -X theirs private

是您正在寻找的。当然,您可以随意附加--squash

【讨论】:

    【解决方案2】:

    如果同一行在提交的两个文件上都发生了更改,则压缩合并不会改变存在冲突的事实。

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

    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”完全相同的内容

    编辑:请注意,这是How do I 'overwrite', rather than 'merge', a branch on another branch in Git?的倒写形式

    编辑 2:如果你想隐藏你的公开单次提交,你当然也可以在这里使用--squash 开关(分别在步骤 1.b 和 2.b 中)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-01
      • 2014-04-21
      • 2019-05-30
      • 2012-07-22
      • 2020-05-14
      • 2012-01-02
      • 1970-01-01
      • 2021-03-04
      相关资源
      最近更新 更多