git - 我如何撤消 git merge ,进行更改,然后重做 merge ?

标签 git merge git-branch

我在分支 myDev 上工作。昨晚我 merge 了 master 分支的一些更改,在执行此操作时,我犯了一个愚蠢的错误,即在一些文件上运行了 JavaScript 格式化程序。

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

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

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

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

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

需要说明的是,我是唯一一个在 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/

相关文章:

git - Hudson SSH key 权限被拒绝

git - 如何将 git 仓库同步到镜像仓库

git - Recursive Three-Way Merge算法有哪些突出问题?

git - 如何使不可推送的提交可推送?

deployment - 在 github 上建立 octopress 博客

git - 在大型存储库中创建 git 分支非常慢

javascript - 如何使用 Visual Studio 将 typescript 网站发布到 GitHub Pages?

git - 断开连接 : No supported authentication methods available (server sent publickey)

r - 通过匹配两行合并不相等的数据帧并用 0 替换 R 中的缺失值

java - 如何保持这个合并数组方法在边界内?