如何将包含已还原提交的主分支合并到分支中

4

我有一个主分支,初始状态如下:

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

然后我做了一些更改:

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

这些修改实际上属于一个特性分支,因此我进行了分支:

git branch TEST

并且在主分支上撤消了更改(我不知道这是否是最好的方式,但在当时它完成了所需的工作):

git revert <last commit hash>

然后我在特性分支上进行了一些更改:

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

现在我遇到了合并主分支到测试分支的问题。我的目标是能够将主分支中未来的所有更改合并到测试分支,并保留我的功能分支更改。

代码已经推送到远程仓库。


谁使用这个遥控器 - 只有你吗? - AD7six
我不确定我理解你的问题。也许是将TEST重新基于master?这将是一个需要保持与主流开发同步的特性分支的正常工作流程。 - guido
@guido 如果我进行变基操作,会出现冲突。有没有办法跳过从主分支中撤销提交?(我是 Git 新手) - NSPKUWCExi2pr8wVoGNk
你在回滚之前推错了提交吗? - guido
@guido 不幸的是,是的。 - NSPKUWCExi2pr8wVoGNk
1个回答

7

撤销还原

为了能够合并 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

然后将该分支与主分支合并:

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

这将导致主分支中的干净/一致的历史记录,TEST 的更改将得到清晰地应用。


在“git branch merge-resolution”之后,应该加上“git checkout merge-resolution”吗?(或者改为“git checkout -b merge-resolution”?) - NSPKUWCExi2pr8wVoGNk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接