2

ほとんど変更されないブランチを持つ Git リポジトリがあります (他の誰もそれに貢献していません)。これは基本的に、一部のコードとファイルが削除されたマスター ブランチです。このブランチがあると、コードとファイルを毎回手動で削除する必要がなく、プロジェクトのスリムなバージョンを簡単にパッケージ化できます。

git rebaseこのブランチをマスターで最新の状態に保つために使用していますが、リベース後にブランチをプッシュしようとすると、常に次の警告が表示されます。

To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'Note about
fast-forwards' section of 'git push --help' for details.

私はそれを使用git push --forceして動作しますが、これはおそらく悪い習慣だと思います。このブランチをマスターと「同期」させておきたいと思っています。このタスクを処理するより良い方法はありますか?

アップデート

完全な説明と解決策については、このトピックを参照してください。

git rebase と git push: 非早送り、なぜ使うのか?

4

1 に答える 1

3

秘訣は次のとおりです。

  • 「テンプレート」ブランチをリベースすると、その履歴が変更されます(異なるSHA1)。つまり、プッシュは早送りではありません(追加する「新しいSHA1」はありませんが、置き換えるSHA1のまったく新しいセットはありません)。 )。
  • 次に、そのブランチを非ベアリポジトリにプッシュします(これはデフォルトで防止されています)

それは悪い習慣です:

  • 他の人がそのブランチのフェッチに依存している場合(ここではそうではありません)
  • プッシュ先のリモートリポジトリの作業ツリーのコンテンツに依存している場合(そのコンテンツがテンプレートブランチを表すように設定されている場合、プッシュした実際のテンプレートブランチと同期していない可能性があるため)

これらの2つのポイントが問題にならない場合は、先に進むことができます。
しかし、これに対処する(またはそれ以上の)「適切な」方法は、(リモートサーバー上の)中間のベアリポジトリをプッシュして、そのベアリポジトリから他のサーバーにテンプレートブランチをフェッチ/プルすることです。そのテンプレートプロジェクトが必要です。

于 2010-05-13T10:12:10.997 に答える