2

別の質問でこのブログにリンクされていて、特定の git ワークフローに関する次の警告を読みました。

膨大な量の髪を引っ張る実際のシナリオは次のとおりです。

  • チームはマージ ワークフローを使用していました。物事を急速に変化させている人はたくさんいます。典型的なスタイルだった
    • 自分のものに取り組む
    • ローカルにコミットする
    • git pull と競合がないことを願っています
    • 他の誰かがそこに入る前に、できるだけ早く git push してください
  • チーム メンバーの多くは、問題なく動作する Tortoise Git を使用していましたが、Git と Subversion の根本的な違いを理解せずに Tortoise SVN から移行していました。
  • 非常に多くの人が非常に多くのことを行っていたため、マージの競合がかなり頻繁に発生しました
  • Tortoise Git の 1 人のユーザーは、pull を実行し、マージの競合が発生し、マージの競合を解決してから、結果をコミットするときにコミットするファイルのリストを注意深く調べます。そこにはたくさんのファイルがあり、彼は、マージの競合がいくつかのファイルにしか関係していないことを知っていました。彼のコミットでは、彼が関与していない他のすべてのファイルの変更のチェックを外し、結果をコミットしてコミットをプッシュしました。
  • 結果:このユーザーの前回のコミットと今回のコミットの間に行われた、他のユーザーによるすべてのコミットは破棄されました。

どうやってこれが起こるのか理解できませんか?すなわち:

  • どのようにして「間違った」状態を押し進めることができますか? 私が理解していると思ったので、これには が必要です--forceが、ここでの話はこれがオフになっているということです。pullユーザーは、競合修正のコミットとプッシュの間に必要ではないでしょうか?
  • ここで破棄されたということは、私が考えていることを意味しているのでしょうか? それらが「削除」されるとは信じがたいですが、実際の結果は、元に戻されているようなものだと思いますか?
4

2 に答える 2

1

Jakubの答えは正しいですが、誰かがより短い説明が必要な場合は、次のとおりです。

コミットが失われたり、リモート リポジトリから削除されたりすることはありませんでした。マージ コミットによって一部のコードが以前の状態に戻されただけです。

この状況は、 を使用した場合と似ていますgit revert。次のような履歴を想像してください。

A---B---C---D

実行すると、によって導入された変更を「元に戻す」git revert B新しいコミットが発生します。歴史はこれからbB

A---B---C---D---b

コミットBはまだありますが、その変更は commit によって削除されbます。

于 2013-09-13T12:50:19.607 に答える