状況は次のとおりです。
Githubに残っているプロジェクトがあり、それを独自のミニGitを持つHerokuにデプロイします。一部の変更は、Herokuに直接適用されました(Herokuからリポジトリを複製し、変更を加えてプッシュしました)。一方、Githubのマスターブランチにもいくつかの変更が加えられています。
メインリポジトリをHerokuにプッシュしたいのですが、Heroku上のコミットがローカルコミットと同期していないため、プッシュが失敗します。
Herokuの変更をマージしたくありません-それらを消してください。
Herokuのgitリポジトリをクリーンにして、最初からローカルリポジトリをプッシュする方法はありますか?
一部の有料サービスがあり、ただの共同作業者なので、アプリケーションを破棄して再作成したくありません。
-f
フラグ(これは標準のgitフラグです)を強制的にプッシュします。デベロッパーセンターの補足情報 Git ドキュメントを参照してください。これにより、Herokuで行った変更が明らかに上書きされます。
Heroku Repoプラグイン をインストールし、それを使用してリモートgit repoをリセットします。
まず、サーバー上のgit repoを削除します。
> cd /my-project/
> heroku plugins:install heroku-repo
> heroku repo:reset
次に、ローカルのgitリポジトリを削除して再作成することにより、再初期化します。
> cd /my-project/
> rm -rf .git
> git init
> heroku git:remote -a <appname>
どこ <appname>
は、herokuでのアプリの名前です。
2つのリポジトリ(ローカルとリモート)は空で同期されているはずです。
https://github.com/heroku/heroku-repo にアクセスし、そのプラグインを使用してリモートでクリーンアップしてください。
早送りのコミットではないためにHerokuプッシュが失敗し、履歴でファンキーなことを何も行わない場合、それは非常に簡単です。
"theirs"戦略オプションを使用した再帰的戦略を使用して、他のリポジトリをローカルのHerokuクローンにマージします。
git merge -X theirs remotes/Origin/master
--force
オプションを使用してプッシュし、上流のHerokuリポジトリへの非早送りコミットを作成します。
一方、実際に履歴を削除しようとしている場合は、他のオプションがあります。
履歴から最初のコミット以外のすべてを削除します(最も簡単)。
git reset --hard $(git log --pretty=oneline | tail -n1 | cut -d ' ' -f1)
git Push --force
個人的には、履歴を保持し、早送りの問題をベストプラクティスとして修正することをお勧めしますが、履歴を積極的に変更したい場合は、オプションがあります。 Gitはその点で非常に柔軟です。
Herokuのアプリバージョン管理システムを使用することもできます。 「アクティビティ」に移動すると、プロジェクトの完全な履歴があります。最初のアクティビティにロールバックすると、リポジトリが完全にクリーンアップされ、アプリが最初にHerokuで作成されたときの状態に戻ります。