NSP*_*GNk 4 git git-revert merge-conflict-resolution
我有初始状态的主分支:
touch file
git add file
git commit -m "initial"
Run Code Online (Sandbox Code Playgroud)
然后我做了一些改变:
echo "123" >> file
git commit -am "feature1"
Run Code Online (Sandbox Code Playgroud)
这确实属于一个功能分支,所以我分支了:
git branch TEST
Run Code Online (Sandbox Code Playgroud)
并恢复了主人的变化(我不知道这是否是最好的方法,但它做了当时需要的东西):
git revert <last commit hash>
Run Code Online (Sandbox Code Playgroud)
然后我在功能分支上做了一些更改:
git checkout TEST
echo "456" >> file
git commit -am "feature 1 continued"
Run Code Online (Sandbox Code Playgroud)
现在我在将 master 合并到它时遇到了问题。我想要的是能够将 master 中的所有未来更改合并到 TEST 分支并保留我的功能分支更改。
代码已经推送到远程。
为了能够合并TEST分支,您需要还原还原,以便TEST可以干净地应用历史记录。
即,而最初的主分支历史是:
$ git checkout master
$ git log --oneline
yyyyyyy Revert "wanted change"
xxxxxxx wanted change
....
Run Code Online (Sandbox Code Playgroud)
而TEST分支历史是:
$ git checkout TEST
$ git log --oneline
aaaaaaa Test development commits
xxxxxxx wanted change
....
Run Code Online (Sandbox Code Playgroud)
你需要的是实现这一目标:
$ git checkout TEST
$ git log --oneline
aaaaaaa Test development commits
zzzzzzz Revert "Revert "wanted change"" # <-
yyyyyyy Revert "wanted change"
xxxxxxx wanted change
....
Run Code Online (Sandbox Code Playgroud)
即结帐 atxxxxxxx和 atzzzzzzz将完全相同。
要做到这一点,一个相对简单的方法是使用一个中间分支:
$ git checkout master
$ git checkout -b merge-resolution
$ git revert yyyyyyy
$ git merge TEST
Run Code Online (Sandbox Code Playgroud)
然后将该分支与 master 合并:
$ git checkout master
$ git merge merge-resolution
$ git branch -d merge-resolution
Run Code Online (Sandbox Code Playgroud)
这应该会在 master 中产生干净/一致的历史记录,并TEST干净地应用更改。