如何撤消git合并,进行更改,然后重新进行合并?

如何撤消git合并,进行更改,然后重新进行合并?,git,merge,git-branch,Git,Merge,Git Branch,我正在研究myDev分支。昨晚我合并了主分支的一些更改,在执行此操作时,我犯了一个愚蠢的错误,在一些文件上运行JavaScript格式化程序 今天,我正在与一位同事的分支合并,现在在系统的一个相当复杂的部分中有几十个冲突,我不确定差异的哪一部分来自格式化程序,哪一部分是实际的更改和错误修复 在跳入这个兔子洞之后,我的计划是尝试撤消我从master到分支的合并,从格式化程序回滚更改,然后再次进行合并 然而,我担心Git可能无法识别未完成的合并,让我再试一次。我不想让这个问题变得更糟,所以我想知道如

我正在研究myDev分支。昨晚我合并了主分支的一些更改,在执行此操作时,我犯了一个愚蠢的错误,在一些文件上运行JavaScript格式化程序

今天,我正在与一位同事的分支合并,现在在系统的一个相当复杂的部分中有几十个冲突,我不确定差异的哪一部分来自格式化程序,哪一部分是实际的更改和错误修复

在跳入这个兔子洞之后,我的计划是尝试撤消我从master到分支的合并,从格式化程序回滚更改,然后再次进行合并

然而,我担心Git可能无法识别未完成的合并,让我再试一次。我不想让这个问题变得更糟,所以我想知道如何撤消合并,恢复格式化程序的更改,然后再次合并,这样我看到的唯一冲突将来自对逻辑的实际更改

这里有一个截图来演示我正在尝试做什么。由于这是一个敏感的操作,我想在开始撤销之前制定一个计划

明确地说,我是唯一一个在myDev分支工作的人。所以这意味着我所做的任何操作都不会影响团队中的其他人


我在考虑完全从历史记录中删除最后两次提交,因为我是这个分支的唯一工作人员,但我不确定这会产生什么样的副作用。

而不是经历删除提交历史记录和回滚提交的复杂而危险的过程,只需创建另一个分支,使用上一个提交作为分支点

在本例中,听起来您希望忽略最后两次提交,并从第三次提交开始。因此,以下是您应该做的:

1.使用SHA1散列签出第三次提交。 注意:用第三个提交哈希替换示例哈希

$ git checkout c21f969b5f03d33d43e04f8f136e7682  
这将在此时签出代码


2.接下来,基于此提交创建一个新分支。 这将从该时间点创建一个新分支。系统现在对您与主分支的拙劣合并一无所知


3.从master合并到myNewDevBranch 现在您可以尝试从master合并到myNewDevBranch。这假设您仍然在myNewDevBranch上。使用
git status
进行确认。然后,运行以下命令:

$ git merge master
解决可能发生的任何冲突,并将更改提交/推送到服务器


4.最后,与mycolleguebranch合并 现在,您正处于与同事合并失败之前的状态。只需像以前一样进行合并:

$ git checkout myColleagueBranch
$ git pull origin myColleagueBranch
$ git merge myNewDevBranch

解决所有冲突,并检查以确保合并成功。因为现在它不再包含运行JavaScript格式化程序所做的更改,所以合并的冲突应该会少很多。

我也有同样的问题。我必须合并远程分支,添加更改,然后在推送中不包括合并中的更改。所以我做了:

论地方分行的合并

$git pull origin branch
添加我的更改,然后

$git commit mychanges
论地方分行非合并

$git cherry-pick sha1ofmychanges
$git push origin local-branch-unmerged

然后我刚从我的源分支向上游发出了一个拉请求。

要明确的是,其消息为“评论了jsfmt…”的提交是
master
的负责人还是
develope
?@Jubobs-不,所有这些东西都来自myDev分支。然后我把所有这些都带到一个同事的分支机构合并,大量冲突的盛行使我放弃了与“MyColleagueBranch”的合并。不过我想我有个计划。我签出了第三个提交,并在该提交的基础上创建了一个新分支。我刚刚重做了合并,认为一切都进行得很顺利。简言之,我可能会自我回答这个问题;但是,如果你有其他方法可以帮助其他人解决同样的问题,请随意回答。是的,确实如此,而且没有冲突!所以我肯定会把它作为一个答案。请向任何到此为止的人提供参考。谢谢!:)你比我更了解你的问题,所以你最好发布自己的答案。请注意,你可以将步骤1和2与
git checkout-b newbranch c21f969…
。很高兴知道,@torek。谢谢我喜欢组合步骤。这样看来就不那么复杂了。我有空的时候再加上。我认为你不应该改变它。在评论中指出这一点是很好的,但将其作为两个步骤让以前从未做过的人更清楚。
$git cherry-pick sha1ofmychanges
$git push origin local-branch-unmerged