web-dev-qa-db-ja.com

Herokuのgitリポジトリをクリーンアップ

状況は次のとおりです。

Githubに残っているプロジェクトがあり、それを独自のミニGitを持つHerokuにデプロイします。一部の変更は、Herokuに直接適用されました(Herokuからリポジトリを複製し、変更を加えてプッシュしました)。一方、Githubのマスターブランチにもいくつかの変更が加えられています。

メインリポジトリをHerokuにプッシュしたいのですが、Heroku上のコミットがローカルコミットと同期していないため、プッシュが失敗します。

Herokuの変更をマージしたくありません-それらを消してください。

Herokuのgitリポジトリをクリーンにして、最初からローカルリポジトリをプッシュする方法はありますか?

一部の有料サービスがあり、ただの共同作業者なので、アプリケーションを破棄して再作成したくありません。

28
Paul

-fフラグ(これは標準のgitフラグです)を強制的にプッシュします。デベロッパーセンターの補足情報 Git ドキュメントを参照してください。これにより、Herokuで行った変更が明らかに上書きされます。

48
Jon Mountjoy

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つのリポジトリ(ローカルとリモート)は空で同期されているはずです。

34
Steve Eynon

https://github.com/heroku/heroku-repo にアクセスし、そのプラグインを使用してリモートでクリーンアップしてください。

5
courtsimas

早送りのコミットではないためにHerokuプッシュが失敗し、履歴でファンキーなことを何も行わない場合、それは非常に簡単です。

  1. 非Herokuリポジトリがリモートとして定義されていることを確認してください。
  2. すべてのリモコンを取得します。
  3. "theirs"戦略オプションを使用した再帰的戦略を使用して、他のリポジトリをローカルのHerokuクローンにマージします。

    git merge -X theirs remotes/Origin/master
    
  4. --forceオプションを使用してプッシュし、上流のHerokuリポジトリへの非早送りコミットを作成します。

一方、実際に履歴を削除しようとしている場合は、他のオプションがあります。

  • 履歴から最初のコミット以外のすべてを削除します(最も簡単)。

    git reset --hard $(git log --pretty=oneline | tail -n1 | cut -d ' ' -f1)
    git Push --force
    
  • 空のマスターブランチ を作成します。
  • git-filter-branch を使用します。

個人的には、履歴を保持し、早送りの問題をベストプラクティスとして修正することをお勧めしますが、履歴を積極的に変更したい場合は、オプションがあります。 Gitはその点で非常に柔軟です。

3
Todd A. Jacobs

Herokuのアプリバージョン管理システムを使用することもできます。 「アクティビティ」に移動すると、プロジェクトの完全な履歴があります。最初のアクティビティにロールバックすると、リポジトリが完全にクリーンアップされ、アプリが最初にHerokuで作成されたときの状態に戻ります。

2
Aerendir