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"

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

代码已经推送到遥控器。

4

1 回答 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
....

即结帐 atxxxxxxx和 atzzzzzzz将完全相同。

使用中间分支

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

$ 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干净地应用更改。

于 2013-12-11T10:45:23.697 回答