我在分支 myDev 上工作。昨晚我 merge 了 master 分支的一些更改,在执行此操作时,我犯了一个愚蠢的错误,即在一些文件上运行了 JavaScript 格式化程序。
今天,我在和一个同事的分支 merge ,现在系统的一个相当复杂的部分有几十个冲突,我不确定哪些差异来自格式化程序,哪些部分是实际的更改和错误修复。
在深入这个兔子洞之后,我的计划是尝试撤消我从 master 到我的分支所做的 merge ,从格式化程序中回滚更改,然后再次进行 merge 。
但是,我担心 Git 可能无法识别未完成的 merge ,让我再试一次。我不想让这个问题变得更糟,所以我想知道如何撤消 merge 、还原格式化程序更改,然后再次 merge ,这样我看到的唯一冲突将来自对逻辑的真实、实际更改。
这是一个屏幕截图,用于演示我正在尝试做的事情。由于这是一项敏感操作,我想在开始撤消操作之前制定一个计划。
需要说明的是,我是唯一一个在 myDev 分支上工作的人。所以这应该意味着我所做的任何操作都不会影响团队中的其他人。
我正在考虑完全从历史记录中完全删除最后两个提交,因为我是唯一一个在这个分支上工作的人,但我不确定会产生什么样的副作用。
最佳答案
无需经历删除提交历史记录和回滚提交的复杂且危险的过程,只需简单地创建另一个分支,使用以前的提交作为分支点。
在这种情况下,听起来您想忽略最后两次提交并从第三次开始。因此,这是您应该做的:
1。使用 SHA1 哈希检查第三次提交。
注意:将示例哈希替换为您的第三次提交哈希
$ git checkout c21f969b5f03d33d43e04f8f136e7682
这会及时检查代码。
2。接下来,基于此提交创建一个新分支。
$ git checkout -b myNewDevBranch
这将从该时间点创建一个新分支。系统现在对您与 master 分支的拙劣 merge 一无所知。
3。从 master merge 到 myNewDevBranch
现在您可以尝试从 master merge 到 myNewDevBranch。这假设您仍在 myNewDevBranch 上。使用 git status
确认。然后,运行此命令:
$ git merge master
解决可能发生的任何冲突并将更改提交/推送到服务器。
4。最后与myColleagueBranch merge
现在您处于与同事 merge 失败之前的状态。像以前一样简单地 merge :
$ git checkout myColleagueBranch
$ git pull origin myColleagueBranch
$ git merge myNewDevBranch
解决任何冲突,并检查以确保 merge 成功。由于这现在不再包含运行 JavaScript 格式化程序的更改,因此 merge 应该会减少很多冲突。
关于git - 我如何撤消 git merge ,进行更改,然后重做 merge ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25631665/