我已经遇到过几次这种情况,我很好奇别人如何处理这个问题。
假设我在远程服务器上有两个分支,如下所示:
branchA: a123-->b123-->c123-->e123-->f123
branchB: a123-->d123-->b123-->c123
我们假设d123
在b123
和c123
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,这会导致历史失败,这不是我想要的。
所以,我的问题是如何在以下情况下将我本地分支的历史与远程分支的历史进行协调:
答案 0 :(得分:1)
我真正想要的是用远程分支历史记录中的内容替换本地分支历史记录中的内容
只需进行硬重置:
git checkout branchB
git fetch
git reset --hard origin/branchB