35

状況は次のとおりです。

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

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

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

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

有料のサービスがいくつかあり、私は単なる共同作業者であるため、アプリケーションを破棄して再作成したくありません。

4

5 に答える 5

59

Heroku Repoプラグインをインストールし、それを使用してリモートgitリポジトリをリセットします。

まず、サーバー上のgitリポジトリを削除します。

> 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つのリポジトリ(ローカルとリモート)が空になり、同期するはずです。

于 2016-06-20T14:59:21.883 に答える
56

-fgitのフラグ(これは標準のgitフラグです)を使用して、プッシュを強制することができます。DevCenterGitドキュメントのサイドノートを参照してください。これにより、Herokuで行った変更が明らかに上書きされます。

于 2012-05-04T16:46:32.687 に答える
6

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

于 2015-02-06T17:42:00.090 に答える
4

早送りコミットではないために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はその点で非常に柔軟性があります。

于 2012-05-04T16:32:00.890 に答える
2

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

于 2014-08-15T09:14:30.830 に答える