web-dev-qa-db-ja.com

Githubプルリクエストで変更/コミットが多すぎる

developmasterの2つのブランチがあります。

何らかの理由でdevelop-> masterのPRを作成するとします。 developを1行だけ変更した場合でも、以前のコミットと変更のリスト全体が表示されます。

また、コマンドラインからdevelopmasterに問題なくマージできる場合は、「自動的にマージできません」と表示されます。

何が起こっているのでしょうか?以前は問題なく動作していました。

編集:developmasterにマージしようとすると、次のようになります。最新のコミットのみが新しいものです。他は以前にマージされました: enter image description here そしてgit log --oneline --decorate --all --graphの出力 enter image description here

12
Evan Hobbs

Gitログには、developブランチには存在しないが、masterブランチには多数のコミットがあることが示されています。プルリクエストはこれらのコミットのリストを正しく表示し、masterブランチにマージできます。

developブランチの一部ではないmasterブランチからのすべてのコミットをリストするには、git log master..developコマンドを使用できます。これは、プルリクエストに表示されるリストと一致する必要があります。

あなたのgitログから、developは以前にmasterにマージされたようです。しかし、これらのマージコミットはmasterブランチにないため、誰かがマスターブランチを以前の状態にリセットした可能性はありますか? masterブランチに同期された環境へのデプロイメントがある場合、おそらく変更をロールバックしますか?

解決

masterdevelopと再度同期するには:

  1. developおよびpullをチェックアウトして、ブランチが最新であることを確認します
  2. masterで同じことをする
  3. developmasterにマージ
  4. 競合を解決する
  5. masterブランチをプッシュする

これでmasterdevelopと再び同期し、developmasterにないコミットのリストは空になります。これらのコミットをgit log master..developでリストします。次のプルリクエストには、このマージ後に行うコミットのみが含まれます。

さらなる調査

この状態になった方法をさらに調査したい場合は、reflogを使用して、masterブランチに加えられた変更を確認できます。たとえば、developの最近のコミットの1つが以前にmasterブランチの一部であった場合。

git reflog master

これを実行したい場合は、ブランチをマージする前に実行できるため、修正前の履歴の様子を確認できます。

9
Niemi

Opを正しく取得したかどうかはわかりません。私が理解しているように、developmentbranchで単一のコミットがあるので、ここで私の試みです。あなたの開発ブランチがマスターと同期していないという問題を考えています

  1. ローカルの変更を維持しながら開発ブランチのコミットを元に戻しますgit reset --soft HEAD ^#最後のコミットがあなたのものであると仮定します

    この時点で、ローカルの変更はそのままマシンに残ります

    これをgitにプッシュします。この時点で強制プッシュを試すことができます。ここからサポートを受けることができます リモートGitリポジトリのロールバック

  2. ローカルの変更を隠して、将来これらの変更を取得できるようにします:git stash

    この時点で、開発ブランチはクリーンでローカルの変更はありません

  3. マスターブランチに切り替えて、リモートで更新します。 git checkout master&git pull Origin master

  4. 開発ブランチに切り替えて、リモートで更新します。 git checkout開発とgit pull Origin開発

  5. マスターをそれにマージします。 gitマージマスター

    この時点で、開発ブランチはマスターと同期していますが、ローカルにあります

  6. 開発ブランチをリモートサーバーにプッシュします。GitPush Origin開発者

    これで、githubにアクセスしてPRを上げ、それでも違いが見られるかどうかを確認できます。上記の手順が問題なく機能する場合は、このような違いはありません。

  7. 次に、ステップ2で隠しておいたローカルの変更を取り戻します。 git stash pop

  8. コミットして開発ブランチにプッシュし、PRを確認します。

すべてが正常に機能する場合は、正しい差分が表示されます。 git cleanも、手順2の後で役立つ場合があります。

0
MaNKuR