Git rebasing与clean分支冲突以及如何处理它们?

时间:2016-08-01 23:42:21

标签: git

我已经遇到过几次这种情况,我很好奇别人如何处理这个问题。

假设我在远程服务器上有两个分支,如下所示:

branchA: a123-->b123-->c123-->e123-->f123

branchB: a123-->d123-->b123-->c123

我们假设d123b123c123 branchB之前提交了branchA。在某些时候,我们需要将branchB重新定义到branchB,因为它有branchB所需的工作。一位同事这样做,清理冲突,一切顺利,branchB被推回到远程服务器。我的本地分支现在很干净,看起来像local branchB: a123-->d123-->b123-->c123 看起来像:

branchB

当然,我需要将远程服务器中的内容从branchB重新绑定到我的本地branchA,这样我才能完成工作。有时虽然,我遇到了一种情况,我在我的本地分支中遇到冲突,git要求我通过每一个,因为变基通常有效。这是因为我实际上没有branchB的历史记录被同事重新定位到branchB

问题在于,我知道在此之前所做的所有工作都在远程branchB中,并且没有实际修复的冲突。经历每一个都是浪费时间。我只是希望远程theirs上的历史记录替换我的本地历史记录。

搜索互联网似乎有一些不同的解决方案,但我不确定哪一个最好或Linus批准,如果你愿意。我实际上不确定我是否找到了我正在寻找的答案。

有些答案说我应该使用rebase并使用--skip选项或选择不同的策略。我相信一些答案说git --skip在这里是合适的......但是在某些情况下,theirs 字面意思会跳过提交。此外,看起来像使用像git rebase -X theirs这样的function wordWrapToStringList (text, maxLength) { var result = [], line = []; var length = 0; text.split(" ").forEach(function(word) { if ((length + word.length) >= maxLength) { result.push(line.join(" ")); line = []; length = 0; } length += word.length + 1; line.push(word); }); if (line.length > 0) { result.push(line.join(" ")); } return result; }; 选项实际上会在某些情况下为我重写SHA,这会导致历史失败,这不是我想要的。

所以,我的问题是如何在以下情况下将我本地分支的历史与远程分支的历史进行协调:

  • 我本地分支中的所有内容都已在远程分支中?
  • 我的分支很干净,没有待定的更改,确实没有任何冲突需要修复?
  • 我真正想要的是用远程分支历史中的内容替换当地分支历史中的内容吗?

1 个答案:

答案 0 :(得分:1)

  

我真正想要的是用远程分支历史记录中的内容替换本地分支历史记录中的内容

只需进行硬重置:

git checkout branchB
git fetch
git reset --hard origin/branchB