異なるローカルGitブランチをHeroku /マスターにプッシュする方法


402

Herokuには、「マスター」以外のすべてのブランチを無視するポリシーがあります。

Herokuのデザイナーがこのポリシーに優れた理由を持っていると確信していますが(私はストレージとパフォーマンスの最適化を推測しています)、開発者としての私にとっての結果は、私が取り組んでいるローカルトピックブランチに関係なく、簡単な方法が欲しいということです。 Herokuのマスターをそのローカルトピックブランチに切り替え、「git push heroku -f」を実行してHerokuのマスターを上書きします。

http://progit.org/book/ch9-5.htmlの「Pushing Refspecs」セクションを読んで得たものは

git push -f heroku local-topic-branch:refs / heads / master

私が本当に欲しいのは、「git push heroku」が常に上記を実行するように構成ファイルでこれを設定し、local-topic-branchを現在のブランチの名前に置き換えることです。誰かがそれを達成する方法を知っているなら、私に知らせてください!

もちろん、これに対する警告は、Herokuアプリ/リポジトリにプッシュできるのが私だけである場合にのみ、これが賢明であることです。テストまたはQAチームは、さまざまな候補ブランチを試すためにそのようなリポジトリを管理する場合がありますが、特定の日にどのブランチにプッシュするかについて全員が合意するように調整する必要があります。

言うまでもなく、すべてをバックアップするためのこの制限なしに、別のリモートリポジトリ(GitHubなど)を用意することも非常に良い考えです。これを「origin」と呼び、Herokuに「heroku」を使用するので、「git push」は常にすべてをoriginにバックアップし、「git push heroku」は現在開いているブランチをHerokuのマスターブランチにプッシュして上書きします。必要であれば。

これはうまくいくでしょうか?

【リモート「ヘロク」】
    url = git@heroku.com:my-app.git
    プッシュ= + refs / heads / *:refs / heads / master

Herokuでダミーのアプリを作成して、それで実験することができると思いますが、実験を始める前に、より経験豊富な誰かから連絡をもらいたいです。

フェッチに関しては、Herokuリポジトリが書き込み専用かどうかは気にしません。すべての作業のバックアップとクローンを作成するために、GitHubなどの別のリポジトリがまだあります。

脚注:この質問は、Herokuでのブランチ戦略を使用したGood Gitデプロイメントと似ていますが、まったく同じではありませんか?


1
現在最も投票されている答えは、これを行う慣用的な方法です(そしてImoが実際の正しい答えです)
Selali Adob​​or 2017

refspecのプッシュに関する代替httpsリソース:refspecのプッシュに関するgit scmのドキュメント
Dylan Landry

回答:


131

ワイルドカードを使用する場合、それはrefspecの両側に存在する必要があったため、機能し+refs/heads/*:refs/heads/masterません。しかし、あなたは使うことができます+HEAD:refs/heads/master

git config remote.heroku.push +HEAD:refs/heads/master

また、これはgit pushで直接実行できます。

git push heroku +HEAD:master
git push -f heroku HEAD:master

4
これら2つのコマンドの違いは何ですか、または両方を実行する必要がありますか
Saad Masood

2
@SaadMasood:最後のgit pushコマンドは同じことを行います。オプションgit push --helpの意味とrefspecのを参照してください。-f+
Chris Johnsen 2013

4
@Chris Johnson:ここの連中をRTFMする代わりに-fパラメータが何を意味するか教えていただけませんか?
AHH 2017年

@AHH -f力の略です。それは私にとってジャッサの答えうまくいきました
タオ氏、

@Chris Johnson:HEADは、履歴全体ではなく、アプリの最新リリースのみをプッシュするために使用されますか?
Cameron Wilby

1566

https://devcenter.heroku.com/articles/git#deploying-codeを参照してください

$ git push heroku yourbranch:master

24
-f forceが必要な場合があります。
スコットスタッフォード

まだドキュメントに載っているにもかかわらず、これは機能していないようです。強制的に使用しても、サーバーはマスターブランチを削除できないと言ってプッシュを拒否します。
Dave Meehan、2015

3
@DaveMeehanこれはまだ機能します。あなたはgit push :master何もしないでそれを上書きすることによってマスターブランチを削除することを試みています。これは、別のブランチで上書きすることとは異なります。Herokuは、おそらくmasterブランチを削除しないようにするための対策を講じています。
デニス

これは素晴らしいソリューションです
Ajay Kumar

2
@nxmohamadブランチがmasterブランチの背後にあり、Herokuの現在のコードをオーバーライドする必要がある場合を除きます。
リックス

64
git push -f heroku local_branch_name:master

3
これには、-fまたはを使用--forceします。プッシュを強制したときに何をしているかを確実に把握することが常に最善です。
MiFiHiBye

@ tomasz-mazurなぜ-fが必要なのですか?
nxmohamad 2017

はい、複数の進行中のブランチで作業するような場合には-fを使用し、herokuの何でも置き換えて、作業ブランチをテストする必要があるかもしれません。テストする他のより良い方法がある場合はアドバイスしてください
Fahad

それは私のコンピューターで動作します、答えてくれてありがとう、実際にはこの構文は通常のGithubリポジトリで有効ですか?
Luk Aron

10

さまざまなローカルGitブランチをHeroku /マスターにプッシュする最も安全なコマンド。

git push -f heroku branch_name:master

注: -fを使用せずにプッシュすることもできますが、他の開発者のプッシュとの競合を避けるために-f(強制フラグ)をお勧めします。


1
最初に-fなしで実行する方が良いと思いませんか?次に、競合がある場合は、最初にそれらを上書きしてもよいことを確認します
nxmohamad

7

私にとってはうまくいきます

git push -f heroku otherBranch:master

他の開発者のプッシュとの競合を回避するために、-f(強制フラグ)が推奨されます。リビジョン管理にGitを使用していないため、トランスポートとしてのみ使用しているため、forceフラグを使用することは合理的な方法です。

ソース:- 公式ドキュメント


5

また、gitフローシステムと機能ブランチを使用している場合、

feature/mobile_additions

そして、stagingtwoと呼ばれるgitリモートで、herokuにプッシュするコマンドは次のようになります

git push stagingtwo feature/mobile_additions:master

4

heroku_sanを確認してください。この問題は非常にうまく解決されています。

たとえば、次のことができます。

git checkout BRANCH
rake qa deploy

また、新しいHerokuインスタンスを簡単に起動して、トピックブランチを新しいサーバーにデプロイできます。

git checkout BRANCH
# edit config/heroku.yml with new app instance and shortname
rake shortname heroku:create deploy # auto creates deploys and migrates

そしてもちろん、何かを頻繁に行う場合は、rakeタスクをより簡単にすることができます。




0

そうだと思う

push = refs/heads/*:refs/heads/*

代わりに...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.