【问题标题】:Bad Merge Conflict Resolution in Git. Retry bad commit, keeping changes since?Git 中的错误合并冲突解决方案。重试错误的提交,从那以后保持更改?
【发布时间】:2012-05-24 13:36:50
【问题描述】:

我正在与另一位开发人员一起开展一个小项目,我们遇到了一些情况。我们都熟悉 SVN,但 Git 对我们来说都是新手。

我们正在处理我们存储库中的一个分支,每个分支都处理我们项目的不同方面。

发生的事情是他提交了一些东西,然后我提交了一些东西,有冲突(在设计器文件中,因为它试图将我们的两个新文件放在同一个“位置”),当我解决它们时,我一定错过了一些东西,但现在它不起作用。我设法以某种方式使文件进入工作状态,然后继续我的快乐方式,添加更多不受糟糕的冲突解决方案影响的东西。

看起来是这样的。

A(好)-> B(坏)-> C(尝试修复)-> D(恢复错误提交)-> A-> E(全新文件)-> F(全新文件)-> G(其他开发者首次提交,因为大问题,引入了更多的问题和冲突。)

我想做的基本上是回到A。并合并我的B,E和F提交,此时另一个开发人员可以提交G。此时我不知道B之间发生了什么和 E,所以我宁愿放弃它,因为这只是我试图解决问题。但是,当我返回 A 时,我不会收到与最初提交 B 时相同的冲突提示。

请上帝帮助我。

【问题讨论】:

  • “当我回到 A 时”是什么意思?你在git reset A吗?

标签: git merge git-extensions merge-conflict-resolution


【解决方案1】:

尝试使用 SHA 引用签出您的 A 提交,使用 git 中的 cherry-pick 命令从 A 和樱桃挑选 B、E 和 F 创建一个新分支。

git checkout -f A23FDE (A)
git checkout -b new-branch-name
git cherry-pick F45HJ2 (B)
git cherry-pick E49FG2 (E)
git cherry-pick K83D87 (F)

【讨论】:

  • 这非常有效!由于我们遇到了各种合并错误,花了一点时间,但它确实让我们回到了我们想要的工作项目的位置。我唯一的另一个问题是,既然我们将分支“CherryPick”合并到分​​支“master”中,我们如何将其推送到 origin/master 和 origin/HEAD 而不会出现 Git 抱怨?我们和主人在一起的地方正是我们希望这两个地方......重置?变基?我们已经尝试阅读,但重置只是提交 --amend?一切都那么混乱哈哈。感谢您的帮助!
  • 如果您已将 CherryPick 合并到 master 并且您对 master 的状态感到满意,那么您应该能够“git push origin master”。如果 master 领先或落后,那么您必须先“git pull origin master”并在推送之前在本地解决任何冲突。如果您希望本地 master 分支覆盖 origin,那么只需在推送到 origin master 时使用 force 标志。虽然我不建议这样做,因为您永远不应该真正强制远程存储库更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
  • 2021-01-20
  • 2015-12-20
  • 2021-07-28
  • 1970-01-01
  • 2012-05-28
相关资源
最近更新 更多