13

私は自分で作業していてfeature branch、レビューの後、それをマージしてdevelopment展開しました。その後、同僚がリリースを行うことに決め、彼と私のものを にマージしましたmaster。展開中に、彼は自分のコードにバグがあり、元に戻されていることに気付きましたmaster

フォーク アンド プル フローでは、これは nowdevelopmentmasterの両方が元に戻されることを意味します。

私が今朝来たとき、私はいつものように開発からリベースし、後でリバートがあったことを知りました.

今、私cherry-pickはオリジナルから作業しようとしてfeature branchいますが、元に戻したために「空のコミットメッセージ」が表示されることに気付きました。

  1. これは、revert が以前のコミットのミラー イメージであるためですか?
  2. 元に戻す方法はありますか?(頭が痛くなる)
  3. リベースした今、コミットを差分に表示する方法はありますか

どんな助けでも大歓迎です。

4

2 に答える 2

23

Cherry-pick と rebase は、コミットのパッチ ID (基本的には変更のハッシュ) をチェックし、変更がブランチに存在することを既に確認しているため、選択しません。ファイルの変更によって実際の diff が少し変更され、その結果、別のパッチ ID が発生する可能性があるため、リベースが機能する場合がありますが、そうではないようです。

「元に戻す」ことはできますが、同僚が導入した壊れたビットが再び導入されます。次に、同僚が行ったバグのあるコミットを元に戻す必要があります。元に戻すことが多く、まっすぐに保つにはかなりの時間がかかるため、ゆっくりと取り、誰かに座ってもらい、何も見逃さないようにしてください.

もう 1 つの選択肢は、 を実行してコミットを再生することgit show COMMIT_ID | git applyです。これにより、差分が作業ツリーに再適用されます。ツリーがクリーンである限りgit commit -C COMMIT_ID、元のコミットからのメッセージを再利用できます。git format-patchおそらくandを使用しgit amて、余分な手順を回避できます。

于 2014-05-15T15:46:39.417 に答える