4

同じファイルに影響する 7 つのブランチがあり、すべてセカンダリ ブランチを介してマスター ブランチにマージされています。ブランチの 1 つが安定していなかったため、マージすることを意図していませんでした。その単一のブランチによって行われた変更を元に戻すことはできますか?

私のリポジトリが次のようになっていると仮定します。

master  A - B - - - - E - - G - - - J - K
b1          |          `- F - - - I´  
b2          |                    / 
b3          |` - C - - - - - H -´
b4           ` - - D - - - -´

現在、D はマスターにあります。私はそれを削除したいです(ただし、b4ブランチに保管してください)。

4

4 に答える 4

3

Hを元に戻すことができるはずです。

git revert H

ただし、修正して後で修正したときに再マージすることはできません。D は、その最初の復帰の復帰を実行することによってのみやり直されます。

ワークフローによっては、b4 を含めずに再度マージを行う方が簡単な場合があります。

この種のものについては、こちらの投稿 (または Google の「機能ごとのブランチ」) で説明しています: http://dymitruk.com/blog/2012/02/05/branch-per-feature/

悪いブランチを取り除くことは、このワークフローの中心です。お役に立てば幸いです。

于 2013-01-15T08:36:23.300 に答える
1

これを読んでください。

基本的に、次のようなものでマージを元に戻したい

git revert -m 1 H

commit を作成Lし、後日その commit が再び有効になったときに

git checkout master &&
    git revert L &&
    git checkout b3 &&
    git merge b4

そしてそれを再びマージします。

私の例では、元に戻しましたが、変更が意味をなさない最下位レベルのブランチでmasterイニシャルを実行することをお勧めします。マスターの一部になるのを避けるだけの場合は、そのレベルで実行しますが、 git revert Hb3(または他のブランチ)に影響を与えたくない場合は、b3でこのリバートを実行し、その後のリバート-リバートを実行します。

于 2013-11-19T10:28:37.543 に答える
0

プッシュが行われなかったと仮定すると:

        git checkout master -b old-ref

必要な場合に備えて...次に:

    git checkout <old correct sha1> -b TEMP
    git branch -D master
    git checkout master

オリジン/マスターを取得する必要があります

    git rebase -i TEMP

これで、未完了のマージを適切に実行できます (または実行できません)。プッシュが行われ、それを制御できない場合 (「ゼロから」再構築することを意味する) は、悪いコミットを元に戻す必要があります。

于 2013-11-26T00:51:50.703 に答える