取り込み - 現在のGitブランチをマスターブランチにする




git マージとは (9)

私はGitにリポジトリを持っています。 私は支店を作って、支店と支店の両方に変更を加えました。

その後数十回コミットして、ブランチがマスターよりずっと良い状態にあることを知ったので、ブランチがマスターになるようにし、マスターの変更を無視します。

私はマスターに変更を保存したくないので、私はそれをマージすることはできません。 私は何をすべきか?

Extra :この場合、 '古い'マスターは既にGitHubのような別のリポジトリにpushされています。 これはどのように物事を変えますか?


Jefromiの答えに追加するには、 sourceブランチの履歴に無意味なマージを配置したくない場合は、 oursマージのために一時的なブランチを作成し、

git checkout <source>
git checkout -b temp            # temporary branch for merge
git merge -s ours <target>      # create merge commit with contents of <source>
git checkout <target>           # fast forward <target> to merge commit
git merge temp                  # ...
git branch -d temp              # throw temporary branch away

そうすれば、マージコミットはtargetブランチの履歴にのみ存在します。

あるいは、マージをまったく作成したくない場合は、単純にsourceの内容を取得し、それらをtarget新しいコミットに使用することができます。

git checkout <source>                          # fill index with contents of <source>
git symbolic-ref HEAD <target>                 # tell git we're committing on <target>
git commit -m "Setting contents to <source>"   # make an ordinary commit with the contents of <source>

Eclipseで eGitを使用している場合:

  • プロジェクトノードを右クリックします。
  • チーム」 →「 詳細」「ブランチの名前変更 」を選択します。
  • 次に、 リモートトラッキングフォルダを展開します。
  • 間違った名前のブランチを選択し、名前を変更するボタンをクリックし、新しい名前に変更します。
  • 新しいマスターを選択し、マスターに名前を変更します。

ここで与えられた解決策( 'master'のブランチの名前変更)は、リモート(GitHub)レポの結果を主張するものではありません。

  • そのブランチを作ってから何もプッシュしていなければ、名前を変更して問題なくプッシュすることができます。
  • もしあなたがGitHubでプッシュマスタを持っていたら、新しいブランチを 'push -f'する必要があります: あなたはもはや早送りモードを押すことはできません
    -f
    --force

通常、このコマンドは、それを上書きするために使用されたローカルリファレンスの祖先ではないリモートリファレンスを更新することを拒否します。 このフラグはチェックを無効にします。 これにより、リモートリポジトリにコミットが失われる可能性があります。 慎重に使用してください。

すでに他の人があなたのレポを引っ張ってしまった場合、自分のマスターをその新しいGitHubマスターブランチに置き換えずに(あるいは多くのマージを扱うことなく)、新しいマスター履歴を引き出すことはできません。
パブリックreposのgit push --forceに代わる方法があります。
Jefromiの答え (元のマスターに戻って正しい変更をマージ)もその1つです。


すべてがリモートリポジトリ(GitHub)にプッシュされていることを確認してください:

git checkout master

"master"を "better_branch"で上書きする:

git reset --hard better_branch

リモートリポジトリにプッシュを強制する:

git push -f origin master

他の2つの答えの問題は、新しいマスターには祖先としての古いマスターがないため、それを押すと他の人はすべて台無しになるということです。 これはあなたがしたいことです:

git checkout better_branch
git merge --strategy=ours master    # keep the content of this branch, but record a merge
git checkout master
git merge better_branch             # fast-forward master up to the merge

履歴を少し鮮明にしたい場合は、マージコミットメッセージにいくつかの情報を追加して、自分が行ったことを明確にすることをお勧めします。 2行目を次のように変更します。

git merge --strategy=ours --no-commit master
git commit          # add information to the template merge message

他のブランチのすべてのファイルをマスターにチェックアウトすることもできます:

git checkout master
git checkout better_branch -- .

すべての変更をコミットします。


私が理解していることから、現在のブランチを既存のブランチにブランチできます。 本質的に、これはあなたが現在のブランチで持っているものでmasterを上書きします:

git branch -f master HEAD

これをやったら、通常はローカルのmasterブランチをプッシュすることができます。ここではforceパラメータも必要になることがあります:

git push -f origin master

マージなし、長いコマンドなし。 branchpushだけですが、 これは masterブランチの履歴書き換えますので、チームで働く場合は、自分が行っていることを知る必要があります。

別の方法として、任意のブランチを任意のリモートブランチにプッシュできることがわかりました。

# This will force push the current branch to the remote master
git push -f origin HEAD:master

# Switch current branch to master
git checkout master

# Reset the local master branch to what's on the remote
git reset --hard origin/master

私のやり方は次のとおりです

#Backup branch
git checkout -b master_backup
git push origin master_backup
git checkout master
#Hard Reset master branch to the last common commit
git reset --hard e8c8597
#Merge
git merge develop

私はブログの投稿で私が欲しかった答えを見つけましたmasterブランチをgitの別のブランチに置き換えてください:

git checkout feature_branch
git merge -s ours --no-commit master
git commit      # Add a message regarding the replacement that you just did
git checkout master
git merge feature_branch

それは基本的にカスカベルの答えと同じです。 彼のソリューションのに追加した「オプション」はすでにメインコードブロックに埋め込まれていることを除いては。

この方法を見つける方が簡単です。

私はこれを新しい答えとして追加しています。なぜなら、このソリューションが後で必要になる場合、私は1つのコードブロックで使用するすべてのコード用意したいからです。

それ以外の場合は、コピーして貼り付けた後、変更したはずの行を表示するために以下の詳細読むことができます。





git