我有两个分支机构,“私人”和“公共”。我在私人和定期工作,我想替换“公共”分支中的所有内容,以便在“私人”中获得文件的干净副本。
因为我不希望“私人”的历史转到“公共”,所以我使用git merge --squash
,但我仍然手动一个一个地解决合并文件。有一个更好的方法吗?
我有两个分支机构,“私人”和“公共”。我在私人和定期工作,我想替换“公共”分支中的所有内容,以便在“私人”中获得文件的干净副本。
因为我不希望“私人”的历史转到“公共”,所以我使用git merge --squash
,但我仍然手动一个一个地解决合并文件。有一个更好的方法吗?
我认为
git merge -X theirs private
就是你要找的。当然,您可以随意添加--squash
。
如果同一行在提交的两个文件上都发生了更改,则压缩合并不会改变存在冲突的事实。
要完全丢弃“public”分支上的所有内容并接管“public”的确切状态,您可以执行以下操作之一:
使用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 (可选:两者分支现在指向合并提交;如果您希望“私有”指向合并之前的提交,请执行:) git checkout private; git reset --hard private@{1}
(请注意,这使用 reflog,并且只有在您同时没有更改“私有”时才会这样工作)
手动检查“他们”的一面:
2.a 假设您在“公共”分支上(否则,git checkout public
)
2.bgit merge --no-commit private
将准备合并提交,但无论是否存在合并冲突,都将在提交之前停止
2. cgit checkout -f private -- .
检查“私人”的当前状态
2.dgit add .
将冲突标记为已解决(如果有)
2.egit commit
保存合并提交;“public”现在将具有与“private”完全相同的内容
编辑:请注意,这是我如何“覆盖”而不是“合并”的倒置情况,Git 中另一个分支上的一个分支?
编辑 2:如果你想隐藏你的单个公共提交,你--squash
当然也可以在这里使用开关(分别在步骤 1.b 和 2.b 中)