問題タブ [git-revert]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - Git で一連のプッシュされたマージとコミットを元に戻す (履歴を書き換えずに)
環境
チームメイトの 1 人が、誤っていくつかのコミットをメインの開発ブランチにプッシュしました。私たちは、同じ場所に配置された小さなチームです。当社のリモート リポジトリは、内部サーバーでホストされています。
以下はコミット ログの先頭です (これらのコミットはすべて既にプッシュされています)。
da8b496
は、ブランチに保持したかった最後のコミットであるため、develop
最後の 5 つのコミットを元に戻す必要がありました。8c29252
「機能ブランチ」での作業を継続するために、から新しいブランチを作成しました。
この回答とLinusからのこの投稿に導かれて、私は多くのことを試しました。しかし、私が最終的に行ったことが「正しい方法」であるかどうかはわかりません。私が見つけた情報は複雑でした。この特定の問題に対する「最善の解決策」を見つけることができませんでした。
質問
私が選択したアプローチ (以下の詳細を参照) は、履歴を損なうことなく、これら 5 つのコミットを元に戻す良い方法でしたか? 同じことを達成するためのより簡単な、または「より正しい」方法はありますか?
とりわけ、da8b496
( git checkout -b new-develop da8b496
) から新しいブランチを作成し、現在のブランチを放棄することを検討しましたdevelop
が、それは適切ではないと感じました。
やったこと(詳細)
最初に、コミットa78b993
および用の新しいブランチを作成しました8c29252
。これらのコミットには保持したい作業が含まれており、最終的にはメインの開発ブランチにマージし直すためです。
次に、開発ブランチで問題のあるコミットを元に戻し始めました。
最初にこれを試しましたが、うまくいきませんでした (コミットの一部がマージされているためと思われます):
だから…代わりに、各コミットを手動で元に戻しました。一つずつ:
すべての元に戻した後にログをコミットします。
元に戻した後のグラフ:
私には正しいようです。最後に、保持したくないバックアップ ファイルをいくつか削除します。
現在のステータスはクリーンです:
そして、すべてをリモートにプッシュします。
git - 失敗したマージで 2 つの git ブランチをフォークする方法
現在、私のgitリポジトリには次のような状況があります。
ブランチ「branch-1」は、しばらく前にマスターからフォークされました (コミット 5 を参照)。
コミット 0 で、それをマスターにマージしたかったのですが、コミット 1 と 3 の間にマスターで発生したすべての変更が上書きされました。効果的な作成
私の同僚はこの状態で作業を続けることができなかったので、マージ コミットを元に戻しました。したがって、HEAD を 1 と同じに設定しました。使用するコマンドは「git revert -m 2 0」です。
しかし今、私は自分の変更を再びマージしたいと思っています。今度は成功することを願っています。次のようなものを作成する必要があります。
これは、失敗したマージ 0 を回避し、マージ前のクリーンな状態 (元に戻すことで達成したクリーンな状態) に戻る新しいコミット -1 になります。
ただし、2 を HEAD にマージしようとしても機能しません。これは、すでに 0 でマージされているためだと思います。
git - マージ中に元に戻された変更を無視する
以下に説明する私のコミットツリー:
一部の変更はmasterで元に戻されました。ブランチからの変更をマスターにマージして、元に戻したコミットを元に戻す必要があります。
ワンステップウェイは存在しますか?それとも、ブランチをマージする前にマスターするチェリーピック(B)は 1 つだけですか?
PS 最終マスターは次のようになります: (ABCDE) - 順序は重要ではありません
git - git revert いくつかの特定のコミット
問題: ブランチには、望ましくないコミットが混在する良好なコミットがあります。
試みられた解決策:
これが行うと思ったのは、指定されたすべてのコミットを適用し、競合を整理できるようにすることです。
私が今それが起こると思うこと:
- git はコミット ハッシュ 5 を適用し、その過程で大きな競合が発生します。
- マージを試み、コードを編集して、より多くの競合の準備を整えます (次のポイントを参照)。
- git は commit ハッシュ 8 を適用しますが、これはマージで行われた編集と競合します
- マージを試みます...などなど
質問: 競合の可能性を提示する前に、git にすべての復帰を連続して適用させるにはどうすればよいですか?
git - git から特定のコミットを元に戻す
多くのコミットと多くのファイルを含む git ツリーがあります。ここで、ファイルのみに触れる特定のコミットを元に戻したいと思います。説明する:
ここで、変更を a . IOW は、ファイル内のコミットのみを元に戻します (異なるファイル内の他の中間コミット (数千になる場合があります) を元に戻すことはありません)。これはどのように可能ですか?
git - Git リバート後にブランチをマージする方法
これまでの話 - プロジェクト リポジトリには、とりわけ 2 つのブランチがあります -update
とmaster
. にマージしようとしupdate
ましたmaster
。しかし、ほとんどすぐmaster
に (マージ前の) 元の形式に戻りました。revert
つまり、2 つのブランチがあります。個別のコンテンツがあります。merge
ブランチを一緒にマスターして更新するにはどうすればよいですか? ブランチマスターは結合された結果を保持していますか?この問題で私を助けてもらえますか?
git - 元に戻されたコミットを含むマスターをブランチにマージする方法
初期状態のマスターブランチがあります:
次に、いくつかの変更を行いました。
これは実際には機能ブランチに属しているため、次のように分岐しました。
マスターの変更を元に戻しました(これが最善の方法であるかどうかはわかりませんが、その時点で必要なことを行いました):
次に、機能ブランチにいくつかの変更を加えました。
そして今、マスターをそれにマージする際に問題があります。私が望むのは、 master の将来のすべての変更を TEST ブランチにマージし、機能ブランチの変更を保持できるようにすることです。
コードは既にリモートにプッシュされています。