2017-02-01 26 views
0

私はgit repoを持っていますが、現在は機能ブランチで作業しています。機能ブランチrebase後のGit-push

私はそのようなものがあります:私は私の機能ブランチに取り組んでいたが、起こったDEVするより多くのコミットを

dev: ---1--2--3-- 
       \ 
fb:    --f1 

を、ので、私はそれにリベース、今の私のコミットのSHA

dev: ---1--2--3--4--5---- 
         \ 
fb:     --f1(another) 
を変更しました

これで、SHAが無効であるため、リモートフィーチャーブランチにプッシュすることができません。私はは強制的に押すことはできません、それはサーバーによって禁止されている原因です。

このような場合の正しいワークフローは何ですか。どうすればよいですか?いずれかの操作を行い例えば

答えて

0

あなたがすることができます

  • は、リモートブランチを削除し、その後、
  • は、新たに指定したリモートブランチにあなたのローカルブランチをプッシュし、お近くの支店押し
  • はリベースを取り消してくださいその後、強制的にプッシュし、お近くの支店を
1

私の力は、プッシュできるように、リポジトリのホスティング事業者を説得

  • 代わりにマージuggestionはmerge remote/dev into local/fbまたはdelete remote/fbのいずれかになり、次にgitヒストリでローカル/ fbをプッシュします。

    • 元に戻すリベースと FB /ローカルにリモート/ devのマージ。

      # undo rebase: reset your local/fb with remote/fb 
      $ git checkout fb 
      $ git reset --hard origin/fb 
      
      # merge and push to remote/fb 
      $ git pull origin dev 
      $ git push origin fb 
      
    • 歴史であなたローカル/ FBを押した後、リモート/ FBブランチを削除します。

      $ git push origin --delete fb  # delete remote/fb branch 
      $ git push origin fb 
      
  • 0

    あなたの会社/チームによって意図したように、それはあなたの全体的なワークフローによって異なります。しかし、彼らはそれを完全には考えていない可能性があります。

    すべてのブランチを強制的にプッシュすることを防ぎ、機能ブランチの再配置を必要とすることは矛盾しています。どちらも、ワークフローの合理的な部分ではありますが、同じワークフローではありません。

    二つのオプション

    を特徴とする強制プッシュがあなたの会社の中に拒否されなければならない場合、結果はあなたがそれらの機能ブランチをリベースすることができないということです。代わりに、早送りではないマージをプリフォームする必要があります。

    フィーチャーブランチをリベースする予定の場合は、それらのフィーチャーブランチに強制的にレポを受け入れる必要があります。 gitがすべてのブランチではなく、特定のブランチだけに強制的にプッシュするのを拒否するのは簡単です。

    ずさんな回避策

    もちろん、あなたの機能ブランチあなたはリベースするたびに削除し、新しい枝を毎回作成することができます。これは非常に控えめで、不必要な数の不必要な分岐が発生します。あなたの会社/チームは、このようなことを避けるためにワークフロー戦略を考える必要があります。

    関連する問題