Git:是否有可能将一个分支合并到主分支中,忽略任何合并冲突?

25

我有一个git仓库,除了主分支外还有一个分支。我希望将这个分支变成主分支 -- 完全覆盖主分支。显然我可以进行合并,但这将导致许多冲突,并且解决它们似乎需要很多工作,而我知道我始终希望使用来自其他分支的文件,而不是主分支。

是否可能将一个分支转换为主分支,或进行合并并告诉git始终优先使用一个分支中的文件而非另一个分支中的文件?

提前致谢!

3个回答

26
你可以使用"reset"命令一次性完成此操作:
git checkout master
git reset --hard topicBranch

硬重置会使当前分支指向给定的提交。这将丢弃主分支上尚未在主题分支上的任何提交;它们将不会被合并。

与变基相同,此处也适用于警告:如果您已经将主分支推送到与其他开发人员共享的任何存储库中,请不要执行此操作。


2
+1,但是你可能应该添加通常的警告,即 git reset --hard 会丢弃所有未提交的更改。 - Mark Longair
2
我不得不多做一步。Git认为有需要拉取的更改,当我执行git pull时,出现了合并冲突。相反,我执行了git push -f来强制推送。 - Force Hero
在继续之前,您应该检查一下这个答案:https://dev59.com/PnE85IYBdhLWcg3wejVO - Ronen

7
如果您是唯一访问此存储库且未与其他开发人员共享,则可以通过创建新分支轻松完成此操作。在开始之前,请确保您的存储库干净(所有修改已检入当前分支)。
备份旧主分支:
git checkout master
git branch oldMaster

删除旧主分支并创建新的主分支:

git checkout topicBranch
git branch -D master
git branch master

如果在远程服务器上托管存储库,则需要更新远程服务器:

git push --force remoteName master:master

重要提示:如果其他开发者从你的代码库中拉取过代码,那么执行此方法会导致他们在下一次从你的代码库拉取或者你推送到他们的代码库时出现错误。


0

我在 Git 方面还不是专家,但看起来你想要使用 rebase 命令:

git checkout branch_name
git rebase master
git checkout master

看起来这将自动合并所有更改到您的主分支,在您的分支与主分支分歧的点,然后在这些更改之上重新应用当前更改到主分支(因此您不必进行合并)。

当然,如果您只想完全覆盖主分支,我认为您只需使用强制选项将该分支推送到主存储库。类似于这样:

git push --force origin branch_name

然后你的远程仓库将拥有来自你分支的所有更改,合并到主分支中,然后你就可以将其拉回来了...

git checkout master
git pull --force origin

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