web-dev-qa-db-ja.com

終了機能は開発からコミットを元に戻しました

私はバージョン管理システムとしてgitを使用しており、分岐モデルとしてgit-flowを使用しています。機能の開発中にシステムをクリーンな状態に維持するために、数週間前に機能ブランチを開始しました。主な開発はdevelopブランチで継続され、開発からの変更は定期的に機能にマージされ、可能な限り最新の状態に保たれました。

しかし、機能が終了する時期が来たので、git-flowのfinish featureを使用して機能をマージして開発に戻しました。マージは正常に完了しましたが、開発で行ったコミットの一部がマージコミットによって元に戻されていることがわかりました。

developまたは機能ブランチのどこにもこれらの変更が元に戻されていませんでした。それらを上書きしたコミットは見当たりません。何も見つかりません。私が今持っている唯一の理論は、gitが私に失敗しているということですが、それは非常にありそうもないでしょう。たぶん私はこの状況を実現するためにある種の間違った操作をしましたか?

コミットが行われたときの履歴をさかのぼることができます。そのコミットからの変更がマージコミットによって元に戻されたことがわかります。ブランチのどこにも、これらの変更を元に戻すコミットはありません。しかし、彼らは元に戻されました。

これはどうして可能ですか?

2
marco-fiset

最後に、それは私の側のエラーでした。最近、プロジェクトをSVNからGitに移行しましたが、SVNに機能ブランチがあり、移行時にトランクと同期していませんでした。

トランクを使用して開発ブランチで最初のコミットを作成し、次にgitを使用して新しい機能ブランチを開始し、SVN機能ブランチの場所と同じようにファイルをコミットしました。

コミットは機能ブランチで新しく、最新のトランクの変更と同期していなかったため、Gitは、最初のコミット後に元に戻された変更が行われ、ブランチをマージするときにこれらの変更が反映されると考えました。開発に戻ります。

私はこれを別のブランチで多くの手作業で解決しましたが、今ではそれがgitのせいではないことがわかりました。

2
marco-fiset

私も同じ問題を抱えていました。あなたのmainブランチから新しい一時ブランチをチェックアウトする方が安全ですマージとテストこの一時ブランチとマージ(確かにそうしている場合)何かを見逃さないで、メインブランチにマージしてください。

コードの動作バージョンがある場合は、それを新しいリリース、または説明タグ付きのブランチに変換し、触れないで、開発ブランチに進みます。

また、マージする前に、可能な限り直接マージを避け、代わりにrebaseコマンドを使用してください。 stashコマンドのようなものです。

1
guneysus