移動 Gitのmasterブランチを別のブランチから完全に置き換える方法は?




git master 置き換え (4)

seotweaksはもともとmasterからブランチとして作成されていたので、 seotweaksを元に戻すことをお勧めします。 しかし、あなたの枝の一つが本当に幹からの枝ではない、あるいはあなたの歴史がとても違って、あなたが仕事をしている新しい枝に賛成してmasterブランチを抹消したいのであればこれを行うことができます:

git push [-f] origin seotweaks:master

これは、このエラーが発生した場合に特に役立ちます:

! [remote rejected] master (deletion of the current branch prohibited)

また、GitHubを使用しておらず、リモートのリポジトリのデフォルトブランチを変更するための[管理]タブにアクセスすることはできません。 さらに、マスターを削除することにより、ダウンタイムや競合状態が発生することはありません:

git push origin :master

可能な重複:
現在のGitブランチをマスターブランチにする

私は私のGitリポジトリに2つのブランチを持っています:

  1. master
  2. seotweaks (元々 masterから作成)

私はすぐにそれをmasterに戻すことを意図して、 seotweaksを作りました。 しかし、それは3か月前であり、このブランチのコードはmasterよりも13バージョン前です。

masterのすべてのコードが多かれ少なかれ時代遅れになっているので、事実上、私たちの働くmasterブランチになりました。

私が知っている非常に悪い練習、教訓は学んだ。

masterブランチのすべての内容をどのように交換することができますか?

私はmasterとマージのすべてを削除することができますが、これはベストプラクティスのようには感じません。


git branch -mを使ってmasterブランチの名前を別のものに変更し、次にseotweaksブランチの名前をmasterに変更しますか? このようなもの:

git branch -m master old-master
git branch -m seotweaks master
git push -f origin master

git push -f origin master実行する前に、元のマスターを確認してください。


私はこれを実行するための最良の方法であることを発見しました(私は私のサーバーに問題を抱えて私に削除させませんでした)。

originリポジトリをホストするサーバーで、リポジトリ内のディレクトリから次のように入力します。

git config receive.denyDeleteCurrent ignore

あなたのワークステーションで:

git branch -m master vabandoned                 # Rename master on local
git branch -m newBranch master                  # Locally rename branch newBranch to master
git push origin :master                         # Delete the remote's master
git push origin master:refs/heads/master        # Push the new master to the remote
git push origin abandoned:refs/heads/abandoned  # Push the old master to the remote

originリポジトリをホストするサーバに戻る:

git config receive.denyDeleteCurrent true

ブログ投稿者の功績はhttp://www.mslinn.com/blog/?p=772


リモートでマスターの名前を変更/削除することはできますが、多くの人が自分の作業をリモートのマスターブランチに基づいて行い、そのブランチをローカルリポジトリで取得した場合には問題になります。
誰もが枝の上で働いているようだが、ここではそうではないかもしれない。

その場合、次のことができます。
git remote --showが動作しない可能性があります。 (あなたのローカルリポジトリ内であなたのリモートがどのように宣言されているか確認するためにgit remote showを作成します。私は ' origin 'と仮定します)
GitHubについては、 house9コメント: "GitHubのAdminボタンをクリックし、 ' Default Branch 'を ' master '以外のものに設定してから、それを元に戻す必要があります。

git branch -m master master-old  # rename master on local
git push origin :master          # delete master on remote
git push origin master-old       # create master-old on remote
git checkout -b master seotweaks # create a new local master on top of seotweaks
git push origin master           # create master on remote

しかし、再び:

  • リモートでマスターが削除されている間に他のユーザーがプルしようとすると、そのプルは失敗します(「リモートではそのようなリファレンスはありません」)
  • マスターがリモートで再作成されると、プルはローカルの(今は古い)マスターでその新しいマスターをマージしようとします:多くの競合。 実際には、ローカルのマスタをリモート/マスタブランチにreset --hardて、現在のマスタを忘れる必要があります。






git-branch