将一个分支强制重新合并到另一个分支的Git操作

3

我有一个演示分支和一个主分支

当我在演示分支上时,我输入

git merge master

它说:

已经是最新版本了。

但是当我执行以下操作时

git diff master demo

它显示有数千个文件是不同的。

我想让git从 master re-merge 到 demo,同时保留在 demo 中已经存在的更改,比如 "demo" 标题等等。在正确合并(替换)更改了的 library 的同时进行。


在合并之前,您可能需要从远程主分支中拉取更改。执行 git checkout master && git pull 命令以进行操作。 - Ostap Maliuvanchuk
3个回答

3

你想要做的是变基操作(rebase):

git rebase origin/master

解释:

演示分支是这样的:

demo = old-master + some_changes

Git rebase会用新的"master"分支替换旧的分支,并保留演示所做的更改。

最终,您将拥有:

demo = master + some_changes

通过变基,demo 分支仍将与 master 分支不同。 - ashmaroli
他不想让demo等于master,我想把git重新合并master到demo中, 同时保留demo中的更改,如果他想让demo等于master,可以执行 git reset --hard origin/master - Akram Fares
不要执行 git reset --hard origin/master!所有在 demo 中的更改都将丢失! - ashmaroli
@Aleksandar Pavić,git rebase origin/master 给你想要的结果了吗? - ashmaroli

0
如果您的demo分支与master不同,那么除非在此期间合并了另一个分支到master中,否则master中的所有提交记录都已存在于demo中。
如果要将demo中的更改合并到master中,则需首先切换到master,然后再合并demo
git merge demo

不,我想将主分支合并到演示分支。 - Aleksandar Pavić
"Already up-to-date." means, there are no changes in master to be merged into demo - ashmaroli
正如@ashmaroli所指出的那样。在master中没有你在demo中没有的更改。git diff master demo只显示了你在demo中相对于master所做的更改。 - Ostap Maliuvanchuk
也许我没有表达清楚,我需要强制覆盖演示中的内容,并使用主分支中的内容。 - Aleksandar Pavić
仍然有些困惑,因为你说需要保留demo中的更改,例如demo标题等。 - ashmaroli

0

经过努力和分析诸如git合并策略之类的东西,我最终做到了。

https://git-scm.com/docs/merge-strategies

这是手动合并,步骤如下:

  • 我创建了一个新文件夹,
  • 将 master 分支从远程仓库中检出到其中
  • 将文件从包含 master 分支的新文件夹手动复制到包含 demo 分支的旧文件夹中
  • 在 demo 分支文件夹中执行:git add --all
  • 然后执行 git commit -m "手动合并"
  • 最后执行 git push

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