移動 - git master 置き換え




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

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

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

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

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

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

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

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

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


"ours"マージ戦略を使ってmasterを次のようなseotweaksで上書きすることができるはずです。

git checkout seotweaks
git merge -s ours master
git checkout master
git merge seotweaks

結果はあなたのマスターは今本質的にseotweaksでなければなりません。

-s ours--strategy=ours略です)

「私たちの」戦略についての文書から:

これは任意の数のヘッドを解決しますが、結果として得られるマージのツリーは常に現在のブランチヘッドのツリーになり、他のすべてのブランチからのすべての変更を効果的に無視します。 これは、サイドブランチの古い開発履歴に取って代わるために使用されることを意図しています。 これは、再帰的マージ戦略の-Xoursオプションとは異なります。


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実行する前に、元のマスターを確認してください。


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

その場合、次のことができます。
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て、現在のマスタを忘れる必要があります。

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

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-branch