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

时间:2014-09-02 20:16:53

标签: git merge git-branch

我正在分支myDev。我昨晚在主分支中合并了一些更改,当我这样做时,我犯了一个愚蠢的错误,即在一些文件上运行JavaScript格式化程序。

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

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

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

这是一个截图,展示了我正在尝试做的事情。由于这是一个敏感操作,我想在开始撤消之前制定一个计划。

Screenshot of my commit history, with annotations outlining what I want to do

要清楚,我是唯一一个在myDev分支上工作的人。所以这应该意味着我所做的任何操作都不会影响团队中的其他人。

我想完全从历史上彻底删除最后两次提交,因为我是唯一一个在这个分支上工作的人,但我不确定可能会产生什么样的副作用。

2 个答案:

答案 0 :(得分:2)

不要经历复杂且冒险的删除提交历史记录和回滚提交的过程,只需创建另一个分支,使用先前的提交作为分支点。

在这种情况下,听起来你想要忽略最后两次提交并从第三次提交开始。因此,这是你应该做的:

1。使用SHA1哈希检查第三次提交。

注意:将示例哈希替换为您的第三个提交哈希

$ git checkout c21f969b5f03d33d43e04f8f136e7682  

此时检查代码。


2。接下来,根据此提交创建一个新分支。

$ git checkout -b myNewDevBranch

这将从该时间点创建一个新分支。系统现在对与主分支的混淆合并一无所知。


3。从master合并到myNewDevBranch

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

$ git merge master

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


4。最后,与myColleagueBranch

合并

现在,在你与同事合并失败之前,你已经到了这一点。只需像以前一样合并:

$ 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

然后我只是从我的原始分支向上游发出拉取请求。