【问题标题】:git merge into master removing changes from branchgit merge into master 从分支中删除更改
【发布时间】:2013-12-17 03:45:49
【问题描述】:

我会尽量讲清楚,但我不确定我是如何陷入这种情况的,并且所有重新创建它的尝试都失败了。

我已经在一个分支 iss454 上工作了几个月了。在那段时间里,我确实做了几次尝试,通过将 master 合并到 iss454 来保持最新(这一切都很好)。我终于完成了我的更改,并准备将它们全部推送到 master 中。但是,当我这样做时,我会从 iss454 中丢失我需要的代码,并且我无法弄清楚为什么合并会擦除这些行。

我尝试过两种方式合并,master 到 iss454 以及 iss454 到 master(嗯,master 的克隆)。我已经尝试将iss454的最后一次提交樱桃采摘到主人身上。我已经尝试在两个方向上重新定位。我还尝试做一个 git merge -s ours master,这似乎有效,但后来我错过了很多其他的变化。到目前为止,无论我尝试了什么,并不是我从 iss454 所做的所有更改都可以完成。

我以前从未遇到过这样的麻烦,所以我确信我在此过程中做了一些让我失望的事情,但正如我所说,我不知道是什么。

对如何将我的代码完全合并有任何想法吗?我真的不想手动解决这个问题。

【问题讨论】:

标签: git merge git-merge git-rebase


【解决方案1】:

从您的描述看来,master 中的其中一个提交具有正在撤消您在 iss454 中的更改的更改。

您最好的选择是尝试追踪该提交,我将通过

查看相关文件的历史记录
git log --oneline --no-merges -- <path to your file>

gitk &lt;path to your file&gt;

查看这些提交,直到您开始了解更改是如何发生的。

【讨论】:

  • 查看 gitk,似乎 iss454 被合并到 master 中(被其他人),然后他们立即做了一些事情(恢复,休息,我不确定)来撤消这个,作为下一次提交显示我的所有文件,我的代码标有删除符号 (-)。如果我在此之前抓住提交并尝试在顶部重新设置 master,我的代码仍然会被删除。我现在有哪些选择,因为我可能在 master 中找到了撤销我的更改的提交?
  • 所以,看起来现在你只需要恢复 revert :-)
  • 我只是恢复了错误的提交,我的代码现在可用,并且在错误提交之后所做的所有提交仍然完好无损。
【解决方案2】:

与其立即合并,不如先清理一下?

$ git checkout iss454 //or maybe a new branch just to be safe

然后将提交压缩成一个有意义的提交:

$ git rebase HEAD~5

^ 你应该选择一个与master有共同祖先的提交。

将除第一行之外的所有picks 更改为squash

然后,用 master 上的进度更新 iss454 的分支:

$ git rebase master

最后将iss454合并到master中:

$ git checkout master
$ git merge iss454

【讨论】:

  • 我找到了共同祖先并尝试了变基,这给了我“当前分支 iss454-test 是最新的”。一旦我执行git rebase master,它就会清除我在 iss454-test 中的本地更改。
  • 也许git log --all --graph --decorate --pretty --oneline 会帮助找到答案
猜你喜欢
  • 1970-01-01
  • 2013-05-14
  • 2011-04-22
  • 2020-09-14
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 2013-12-13
  • 1970-01-01
相关资源
最近更新 更多