【问题标题】:How to merge master containing reverted commits to branch如何将包含还原提交的主合并到分支
【发布时间】:2013-12-11 09:50:36
【问题描述】:

我有初始状态的主分支:

touch file
git add file
git commit -m "initial"

然后我做了一些改变:

echo "123" >> file
git commit -am "feature1"

确实属于某个特性分支,所以我分支了:

git branch TEST

并在 master 中恢复更改(我不知道这是否是最好的方法,但它做了当时需要的):

git revert <last commit hash>

然后我在功能分支上做了一些更改:

git checkout TEST
echo "456" >> file
git commit -am "feature 1 continued"

现在我无法将 master 合并到它。我想要的是能够将 master 中的所有未来更改合并到 TEST 分支并保留我的功能分支更改。

代码已经推送到远程。

【问题讨论】:

  • 谁使用这个遥控器 - 只有你?
  • 我不确定我明白你在问什么?也许将 TEST 重新定位在 master 之上?这将是功能分支的正常工作流程,需要在主流开发中保持更新
  • @guido 如果我变基,我会遇到冲突。有没有办法跳过 master 的回复提交? (我是一个 git 新手)
  • revert 之前是否推送了错误的提交?
  • @guido 很不幸,是的。

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


【解决方案1】:

还原还原

为了能够合并 TEST 分支,您需要还原还原,以便可以干净地应用 TEST 历史记录。

即而最初的主分支历史是:

$ git checkout master
$ git log --oneline
yyyyyyy Revert "wanted change"
xxxxxxx wanted change
....

TEST 分支历史为:

$ git checkout TEST
$ git log --oneline
aaaaaaa Test development commits
xxxxxxx wanted change
....

你需要做到这一点:

$ git checkout TEST
$ git log --oneline
aaaaaaa Test development commits
zzzzzzz Revert "Revert "wanted change"" # <-
yyyyyyy Revert "wanted change"
xxxxxxx wanted change
....

即在xxxxxxxzzzzzzz 结帐将完全相同。

使用中间分支

为此,一种相对简单的方法是使用中间分支:

$ git checkout master
$ git checkout -b merge-resolution
$ git revert yyyyyyy
$ git merge TEST

然后将该分支与 master 合并:

$ git checkout master
$ git merge merge-resolution
$ git branch -d merge-resolution

这应该会在 master 中产生干净/一致的历史记录,并干净地应用 TEST 的更改。

【讨论】:

  • “git branch merge-resolution”之后不应该有“git checkout merge-resolution”吗? (或者 'git checkout -b merge-resolution' 代替?)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-20
  • 2016-01-14
  • 2015-08-12
  • 2023-02-07
  • 2012-12-05
  • 2019-05-31
相关资源
最近更新 更多