【问题标题】:Git merge master without reverting commitGit合并master而不恢复提交
【发布时间】:2017-07-14 13:40:04
【问题描述】:

我正在尝试修复我的 git 分支,这就是我所做的。

我有一些本应在分支中开发的代码;但是,我提交并推送到 master(提交 A)。

然后我继续并恢复了该提交并将恢复推送到主控(提交 B 恢复 A)。

然后我从提交 A 创建了一个分支并继续我的开发(提交 C 和 D)。所以这就是我的树目前的样子:

* D (HEAD -> branch_a, origin/branch_a) removed testing code
* C updated
| * B (origin/master, origin/HEAD, master) Revert "new code"
|/  
* A new code

我希望能够将此分支干净地合并回 master。通常我会做的是git pull origin master 进入我的分支,但在这种情况下我不能这样做,因为master 具有 A 的恢复。

我可以在 branch_a 中做些什么来确保它能够合并回 master 而不会丢失我的工作?

【问题讨论】:

  • 您只是想忘记B 并希望您的历史看起来像A -> C -> D 这样是否正确?
  • @mkrieger1 一旦我合并回master,是的,我基本上想忘记B。最初的问题是 A 一开始就不应该在 master 上,B 是必要的唯一原因是,所以 A 在我准备好之前不在 master 上。

标签: git


【解决方案1】:

输入问题后,我发现了一个similar question,其中恰好有一个命令,达到了我想要的结果。

由于对 master 的唯一提交是 B,这是分支上不需要的提交,因此可以使用在发生冲突时保留分支中的更改的策略将 master 合并到 branch_a .

从branch_a 运行git merge -s ours master,这将使用branch_a 版本将master 合并到branch_a,以防发生冲突。

这个操作的结果改变了树的样子:

E (HEAD -> branch_a, origin/branch_a) Merge branch 'master' into branch_a
|\  
| * B (origin/master, origin/HEAD, master) Revert "new code"
* | D removed testing code
* | C updated
|/  
* A new code

【讨论】:

    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2022-07-19
    • 2011-04-18
    • 2013-10-23
    • 2018-06-22
    相关资源
    最近更新 更多