Git不会合并(“已经更新”)-如何在不重写历史记录的情况下解决此问题?

时间:2019-11-15 04:47:57

标签: git

在允许重置和/或重新建立基础(并因此重写历史记录)的情况下,我在这里找到了很多答案,但是当您新克隆一个回购,签出并拉出分支A后,该怎么办?和分支B,然后在分支B上,git merge A返回Already up to date.,尽管事实git diff A清楚地表明了一个非平凡的增量?

我知道的一种方法是将B重新合并到A,更正A上的问题,然后将其合并到B(实际上是A上的无操作)。但这意味着更改源分支,我觉得这没有必要。

因此,是否有一种方法可以告诉git合并A中的所有内容,以便B匹配A而无需重置/重新设置基准,而无需对A做任何事情(因为A正是我想要的东西开始) ,而没有在B上添加另一个仅使问题复杂化的提交(因为这是引起我要解决的问题的一种方式)?

(要强调的是,这是从新克隆并提取的回购中获得的,因此我没有使用任何技巧(如果这会创建合并提交,我可以在推送之前更正并修改它,但是问题是根本没有合并提交。)

我怀疑可能没有,并且唯一的干净方法(假设在这种情况下我无法重写历史记录)将涉及(返回)合并到A。但是,git充满并且充满了奇迹,所以我想值得在这里问。

3 个答案:

答案 0 :(得分:1)

该消息的意思是:B位于A的前面,因此合并操作无法理解应该合并的内容。


(编辑:重新阅读您的问题...)

如果要将内容重新设置为“ A中的内容”:这不是merge操作,则需要在磁盘或索引中将内容重新设置为什么内容。它在A中。

  • 如果您的git版本为2.23或更高版本:请查看git restore A
  • 如果您的git较旧,

    # apply the diff between B and A to B :
    git diff -p B A | git apply --index -
    
    # commit
    git commit
    

答案 1 :(得分:0)

我的建议是创建一个新分支并删除B(如果有必要,请从B中挑选需要的内容)。

答案 2 :(得分:-1)

尝试:

git checkout master
git reset --hard <branch>
git push --force origin master