0

GIT からファイルまたはディレクトリを削除することについて言及している投稿がいくつかありますが、これらの変更をメイン リポジトリにプッシュする方法については説明していません。

たとえば、これはディレクトリを削除するのに問題なく機能しますが、この変更をメインの Git リポジトリにプッシュしようとすると拒否されます。

! [rejected]        master -> master (non-fast forward)
error: failed to push some refs to '/repo/project.git'
To prevent you from losing history, non-fast-forward updates were rejected
Merge the remote changes before pushing again.  See the 'non-fast forward'
section of 'git push --help' for details.

これを実際にメインリポジトリにプッシュし、実際にそのディレクトリを削除する最後のステップは何ですか?

4

2 に答える 2

2

何かを積極的に削除すると、履歴が書き換えられます。したがって、履歴が失われるため、アップストリーム リポジトリは変更を拒否しています。この場合、使用する必要があります

git push --force
于 2010-08-20T08:54:45.677 に答える
1

ニック・ルイスの答えで十分ですが、コメントに収まる以上に強調したいだけです。git filter-branchマニュアルページからの引用は次のとおりです。

警告!書き換えられた履歴は、すべてのオブジェクトのオブジェクト名が異なり、元の分岐に収束しません。元のブランチの上に書き換えられたブランチを簡単にプッシュして配布することはできません。完全な影響がわからない場合は、このコマンドを使用しないでください。問題を解決するために単純な単一のコミットで十分な場合は、とにかく使用しないでください。git-rebase(1) (公開された履歴を書き換える方法の詳細については、「UPSTREAM REBASE からの復元」セクションを参照してください。)

イタリック体の強調が追加されました - これはかなり重要です。フィルターブランチは実際に履歴を書き換えます。レポからクローン/プルされた人を台無しにしてしまい、恐ろしいです。やってみる前に、そのすべてを本当に知っておく必要があります。filter-branchここにいるほとんどの人は、またはを推奨するたびにそのリマインダーを提供することについてかなり上手rebaseです。push --forceここで、公開レポの履歴を完全に書き換えるために答えがあるという質問について、かなり強く繰り返すのが適切だと思います。恐ろしい手術です。

于 2010-08-20T14:46:50.310 に答える