6

機能ブランチをベースラインにコミットし、状況によってはそれがひどく間違っている可能性があることを発見するという問題に遭遇することがあります。そのため、それ以降に行われた他のすべてのコミットを失うことなく、変更を元に戻す必要があります。ただし、誰かが元のブランチで作業を続ける必要があります。

履歴を変更するためにメインラインで使用したくありませんがgit rebase(それ自体であらゆる種類の問題が発生するため)、メインラインで使用すると、ブランチで実行さgit revertれるとすぐgit mergeにピックアップしますシステムに対して行われたその他の変更があると、行われたすべての作業が消えます。

ブランチの変更をそのまま維持するにはどうすればよいですか?

4

3 に答える 3

5

リベースやリセットはしたくないと思いますが、これはマージのみのアプローチです。

2 つのブランチmasterとがあるとしますfeaturemasterしたがって、機能を次のようにマージすることにしました。

$ git merge feature

これで、すべてのfeature変更がマスターに反映されました。最も困難なシナリオを想定しています。両方のブランチでマージ後にコミットが行われています。しかし、突然、何も機能しないことがわかりfeature、すべてが壊れており、元に戻すことにしました。あなたの履歴は次のとおりです(で見ることができますgit log --graph feature master):

* commit 838f29fda2333bdbfc0d1be44d2387e6119dc4e8
| 
|     f3
|    
| * commit 58d1e3f0e032cc77d4ab2bbf0bdfe6407b96b7e6
| | 
| |     m3
| |     
| *   commit afb600fe382befe095f9b8a6e9eef98be25c929b
| |\  Merge: 5cddc52 8660a59
| |/  
|/|   
| |       Merge branch 'feature'
| |   
* | commit 8660a59eeb13f9b3447846ba6977140f7c86c7a4
| | 
| |     f2
| |   
* | commit 6f76e2288d69808b97981340198fd8044ab47630
| | 
| |     f1
| |   
| * commit 5cddc528de424a01d1d18552ddea93435618e2f7
| | 
| |     m2
| |   
| * commit fa6ebb76f9f0308f7dcd1148503534668fa15358
|/  
|   
|       m1
|  
* commit 4e3aa05d6f46eb14bbbc253a42325e9a53a3393e

マージ後にコミットされた f3 と m3 に注目してください。featureそのため、 に表示されたからの変更のみを慎重に削除する必要がありますmaster

masterこれを行うには、マスターのベース (パラメーター) を保持したまま、 のマージ コミットを元に戻すことができます-m1。それを実現するために、マージ ポイントに基づいて新しいブランチを作成し、そこに戻します。

$ git checkout -b feature-revert afb600fe
$ git revert -m1 HEAD

これで、ブランチの変更が元に戻されましたfeature-revert。マージしてマスターに入れるだけです。

$ git checkout master
$ git merge feature-revert

そのため、現時点では にmasterは から何もありませんfeature。ただし、後でフィーチャを再マージする場合、元に戻されたすべての変更は、マージされて元に戻されたため、マスターで失われます。

この問題を解決するには、revert (he-he) を元に戻し、それを にマージして戻す必要がありfeatureます。

$ git checkout feature-revert
$ git revert HEAD
$ git checkout feature
$ git merge feature-revert

すでにマージしたので、ブランチはもう必要ないと思いますが、必要に応じてそのままにしておくことができます。

$ git branch -d feature-revert

マージして元に戻すと、すべての変更が通常のワークフローmasterに持ち込まれることに注意してください。feature

これで、修正を行った後、いつでも通常どおりfeatureに再びマージできます。master

于 2013-07-23T10:53:36.950 に答える