1938

Git リポジトリに 2 つのブランチがあります。

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

seotweaksにすばやくマージすることを意図して作成しましたmaster。ただし、これは 3 か月前のことであり、このブランチのコードは より 13 バージョン進んでmasterいます。

のすべてのコードがmaster多かれ少なかれ時代遅れになっているため、これは事実上、私たちの作業マスター ブランチになりました。

私が知っている非常に悪い習慣、教訓。

masterブランチのすべてのコンテンツを のコンテンツに置き換える方法を知っていますseotweaksか?

すべてを削除しmasterてマージすることもできますが、これはベスト プラクティスとは思えません。

4

5 に答える 5

3266

次のように、「私たちの」マージ戦略を使用してマスターを seotweaks で上書きできるはずです。

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

その結果、マスターは本質的に seotweaks になるはずです。

(-s oursは の略--strategy=ours)

「私たちの」戦略に関するドキュメントから:

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

コメントからの更新: Fatal: が表示された場合はrefusing to merge unrelated histories、2 行目を次のように変更します: gitmerge --allow-unrelated-histories -s ours master

于 2010-05-19T04:51:31.177 に答える
570

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

于 2010-05-19T03:11:43.567 に答える
83

リモートでマスターの名前を変更/削除できますが、多くの人がリモートマスターブランチに基づいて作業を行い、ローカルリポジトリでそのブランチをプルしている場合、これは問題になります。
誰もがブランチ''に取り組んでいるように見えるので、ここではそうではないかもしれませんseotweaks

その場合、次のことができます
。gitremote--showが機能しない可能性があります。(git remote showローカルリポジトリ内でリモートがどのように宣言されているかを確認するために作成します。' origin'を想定します)
(GitHubに関して、house9のコメント:「AdminGitHubの''ボタンをクリックして、' 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、ローカルマスターからフェッチするリモート/マスターブランチに移動する必要があり、現在のマスターを忘れてしまいます。
于 2010-05-19T03:57:04.710 に答える
45

seotweaksはもともと からのブランチとして作成されたのでmaster、マージして戻すことをお勧めします。ただし、ブランチの 1 つが実際のブランチではない場合や、履歴が非常に異なるため、作業を行っている新しいブランチを優先しmasterてブランチを消去したい場合は、次のことができます。masterこれ:

git push [-f] origin seotweaks:master

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

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

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

git push origin :master
于 2012-07-25T20:44:42.987 に答える
8

これがこれを行う最良の方法であることがわかりました(サーバーに問題があり、削除できませんでした)。

リポジトリをホストするサーバーで、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の著者の功績

于 2012-09-28T13:13:57.207 に答える