web-dev-qa-db-ja.com

Gitワークフロー-ローカルリポジトリを「中央」リポジトリに変える

おもちゃのプロジェクトがあるローカルリポジトリがあり、思っていたよりも深刻であることが判明しました。そのため、不注意にコミットした単一の開発ブランチから、有名なブランチのようなものを使い始めました http://nvie.com/posts/a-successful-git-branching-model/ ==

開発ツリーとマスターツリーをプッシュできる「中央」リモートリポジトリが必要です。

最初の問題は、これをどのように行うかです。サーバー上の空のリポジトリを初期化し、このリポジトリをローカルリポジトリのリモートオリジンとして参照しますか?

事前にリモートリポジトリにブランチを作成する必要がありますか、それともプッシュするだけで十分ですか?

第二に、私のローカルリポジトリの最初のコミットは本当に厄介なので、-no-ffの方法で、または私が理解しているように、それらの初期のコミットの多くを1つにまとめたいと思います。

私が理解しているように、これは中間ブランチでのみ機能します。つまり、現在、ローカルリポジトリに2つのブランチ "develop"と "master"があります。 「歴史を変える」方法を2つ思いついた

2つのブランチを作成しますdevelop-squashedmaster-squashed。失いたいコミットを押しつぶしながら、元のブランチをそれらにリベースします。 -squashedブランチが元のマスターと同等であり、ブランチを開発したら、元のブランチを削除して、* -squashedブランチをmasterに名前変更」できます。および開発

最後に、masterおよびdevelopmentにプッシュできますremoteリポジトリ。

  • それは行く方法ですか?

  • リベースすることで、両方のブランチmasterdevelopの両方が、「成功したgitブランチモデル」に従い始めた時点まで同じ履歴を持っていることを確認するにはどうすればよいですか? (彼らは現時点でその時点まで同じ歴史を持っています)。

2
wirrbel
  1. サーバー上に中央リポジトリを作成するよりも、最初に履歴をクリーンアップする必要があります。履歴を公開すると、元に戻すことはできません。
  2. ブランチに変更する期間全体で共通の履歴がある場合は、one "*-squashed"ブランチのみになります。 developを持つことは、実際にはmasterとは異なる点からのみ意味があります。
  3. git filter-branchコマンドをご覧ください。すべてのリベースを簡単に実行できるはずです(フィルターブランチに関連するものはすべて簡単と呼ぶことができますが、いずれの場合でも多くの作業を節約できます)。あなたがしたい操作は基本的に簡単です。最初のコミットのためだけに、親をクリーンアップされたものに置き換えます。
  4. 誰かが実際に初期の歴史を見るにはlotの自由な時間を持たなければならないので、合法的に公開できないか、本当に非常に恥ずかしいことがない限り、私はおそらく気にしないでしょう。
  5. サーバー上の空のリポジトリを初期化し、リモートとして追加して、ブランチとタグをプッシュするだけです。
7
Jan Hudec