我正在分支myDev。我昨晚在主分支中合并了一些更改,当我这样做时,我犯了一个愚蠢的错误,即在一些文件上运行JavaScript格式化程序。
今天,我正在与一个同事的分支合并,现在系统中一个非常复杂的部分有几十个冲突,我不确定差异的哪一部分来自格式化程序,哪个部分是实际的更改和错误修正。
在潜入这个兔子洞之后,我的计划是尝试撤消我从master到我的分支的合并,从格式化程序回滚更改,然后再次进行合并。
然而,我担心Git可能无法识别撤消的合并,让我再试一次。我不想让这个问题变得更糟,所以我想知道如何撤消合并,恢复格式化程序更改,然后再次合并,以便我看到的唯一冲突将来自对逻辑的真实,实际更改。
这是一个截图,展示了我正在尝试做的事情。由于这是一个敏感操作,我想在开始撤消之前制定一个计划。
要清楚,我是唯一一个在myDev分支上工作的人。所以这应该意味着我所做的任何操作都不会影响团队中的其他人。
我想完全从历史上彻底删除最后两次提交,因为我是唯一一个在这个分支上工作的人,但我不确定可能会产生什么样的副作用。
答案 0 :(得分:2)
不要经历复杂且冒险的删除提交历史记录和回滚提交的过程,只需创建另一个分支,使用先前的提交作为分支点。
在这种情况下,听起来你想要忽略最后两次提交并从第三次提交开始。因此,这是你应该做的:
注意:将示例哈希替换为您的第三个提交哈希
$ git checkout c21f969b5f03d33d43e04f8f136e7682
此时检查代码。
$ git checkout -b myNewDevBranch
这将从该时间点创建一个新分支。系统现在对与主分支的混淆合并一无所知。
现在您可以尝试从master到myNewDevBranch的合并。这假设您仍然在myNewDevBranch上。使用git status
进行确认。然后,运行以下命令:
$ git merge master
解决可能发生的任何冲突,并将更改提交/推送到服务器。
现在,在你与同事合并失败之前,你已经到了这一点。只需像以前一样合并:
$ git checkout myColleagueBranch
$ git pull origin myColleagueBranch
$ git merge myNewDevBranch
解决所有冲突,并检查以确保合并成功。由于现在不再包含运行JavaScript格式化程序的更改,因此合并应该有更少的冲突。
答案 1 :(得分:0)
与我几乎一样的问题。我必须从远程合并分支,添加我的更改,然后不包括推送中合并的更改。所以我做了:
在local-branch-merged
上LIKE '%...%'
添加我的更改,然后
$git pull origin branch
在local-branch-unmerged上
$git commit mychanges
然后我只是从我的原始分支向上游发出拉取请求。