9

同僚が機能について数週間にわたって作業していましたが、現在の git コミットは次のようになっています。

colleag  add class  8b5bec5
colleag  add change 3535adc5
colleag  Merge branch 'NEW' of github.example.de:example/app into NEW   0cc2d24
colleag  add change
colleag  add validation     7eff440
colleag  rebase done wrong merge    f8e35e3
colleag  Merge branch 'NEW' of github.example.de:example/app into NEW   2168ac6
colleag  wrong merge    a6ed636
colleag  typo in spec   7b23633

私は彼がやっていると思います:

git pull origin master

彼の作業ブランチで。

だから、私の質問:

1) これはどういう意味ですか:

Merge branch 'NEW' of github.example.de:example/app into NEW    2168ac6 

マージコミットですが、なぜgitはここでリモートとマージするのでしょうか?

2) これらのマージ コミットを消去することは可能ですか? 現在、コミットを厳選していますが、これが最適かどうかはわかりません。

git ログを読んだ後、他に何がアドバイスできますか?

4

1 に答える 1

21

これらのコミットは、同僚がローカル ブランチでいくつかの作業をコミットし、リモートから新しいコミットをプルしたためです。重要なgit pullのは、2 つの git コマンドgit fetchgit merge. 一般に、これらのコミットはかなり無害ですが、私の経験では、時折いくつかの問題を引き起こしました。

コミットは、実行することで回避できますgit pull --rebase origin master。これにより、プルは と の組み合わせにgit fetchなりgit rebaseます。これにより、ローカル コミットが取り除かれ、リモートからコミットが取り込まれ、ローカル コミットが一度に 1 つずつ適用されます。リモートに既にあるコミットについては、インタラクティブなリベースでそれらをクリーンアップすることを試みることができますが、それは価値があるよりも多くの問題を引き起こします. 同僚のワークフローを変更して、リモートに残しておきましょう。共有履歴を変更することは危険であり、苦痛を伴うプロセスになる可能性があります。

同僚が持っていたコミットを受け入れるだけなら、マージコミットをチェリーピックしません。ただし、一般的には、コミットをチェリーピックするよりもブランチをマージすることを好みます。これは、異なるshaの同じパッチを持つコミットが発生し、ブランチのマージが本来よりも困難になる可能性があるためです。

于 2013-10-01T13:33:35.067 に答える