我有2个分支A和B.两个分支都有很多不同的提交,并且主人已经向前推进了。
我想要做的是用A替换B的所有更改。 即,B应具有与A完全相同的代码。
我尝试使用rebase / merge。甚至-Xtheirs同时重新调整B,但总是遇到大量的冲突。
我试过
git checkout B
git reset --hard A
在How to copy one branch to another regardless changes?中给出,但这给了这个 -
Your branch and 'origin/B' have diverged,
and have 6603 and 1823 different commits each, respectively.
有没有办法可以将A的代码/提交复制到B,没有冲突?请帮忙。
答案 0 :(得分:0)
如果您真的想从B中丢弃所有更改,这似乎是浪费,那么您可以强制更新分支指针。
git branch -f A B
答案 1 :(得分:0)
git checkout A -B B
签出A
的工作树,同时为其指定分支名称B
。 (由于B
已存在,因此需要覆盖-B
(大B)。)
这实际上与此相同:
# Checkout the branch 'A' and make the working tree reflect this
git checkout A
# Create/override a branch 'B' at this current position
git checkout -B B
最终结果是分支(实际上只是指针)'A'和'B'指向完全相同的提交。
N.B。最终结果与git checkout B && git reset --hard A
的结果非常相似。
现在,既然您似乎关注 origin/B
有多样化的消息,那么您现在可以做两件事:
您可以更新origin/B
以反映新的B
强制 推送:(如果您提供担心,则不必担心最初在origin/B
中的提交将不复存在。)
push origin B --force
出于某种原因,您无法强制推送(仅快进服务器?)或者您希望保留B
下的提交历史记录 - 而不是他们的更改。在这种情况下,它涉及更多:(这个用例非常罕见,所以我不完全确定这是你所追求的):
git checkout A --detach
git merge -s ours B
git checkout -B B
这使得合并提交继续进行A
,将B
合并到A
而不实际更改任何文件。这个新的B
可以正常推送,因为它不是origin/B
的偏差。
答案 2 :(得分:0)
您将本地分支B
重置为A
的命令没问题
您收到的消息只是告知您本地分支B
与远程分支B
不同。
如果这确实是您想要做的事情,那么如果遥控器允许强行推动,现在只需B
强制推动origin/B
git push -f origin B
B
。
但请注意,您正在重写已发布的历史记录,并且您会因为create table dbo.Users (
Id int identity not null primary key clustered (Id),
Name nvarchar (120) null,
);
create table dbo.Organizations (
Id int identity not null primary key clustered (Id),
Name nvarchar (120) null,
);
的工作而烦恼任何其他开发人员,因为他们必须通过工作的重新设置来手动恢复。