web-dev-qa-db-ja.com

あるリモートブランチを別のブランチにマージするのではなく、どうすれば上書きできますか?

私は2つのブランチを持っています。ステージングとベータ。ステージングにはコード(ファイルを含む)があり、それはまったく必要ありません。ベータでステージングを完全に上書きして、それらのファイルやコードがステージングからベータにマージされないようにするにはどうすればよいですか。

私はこれを行うことをお勧めする人もいます:

git checkout staging
git merge -s ours beta

しかし、既存のファイルが「コードの競合」になるとは思わないため、削除されません。私が間違っている?私が正しい場合、これをどのように達成しますか?

30
Trip

stagingを単純に削除し、betaに基づいて再作成できます。

git branch -D staging
git checkout beta
git branch staging
29
Daniel Hilgarth

気にしない場合stagingの古い履歴については、単に再作成できます。

git checkout beta
git branch -f staging

あなたが気にするならstagingの古い歴史について、物事はもっと楽しくなる:

git checkout staging        # First, merge beta into staging so we have
git merge -s theirs beta    # a merge commit to work with.

git checkout beta           # Then, flip back to beta's version of the files

git reset --soft staging    # Then we go back to the merge commit SHA, but keep 
                            # the actual files and index as they were in beta

git commit --amend          # Finally, update the merge commit to match the
                            # files and index as they were in beta.
23
Amber

気が変わった場合に備えて、名前を変更することをお勧めします。

git branch -m staging staging_oops
git checkout beta
git branch staging

あなたが本当にその余分なブランチを持つのを我慢できない場合:

git branch -D staging_oops
8

ステージングの履歴が問題にならない場合は、単にこれを行うことができます。

git checkout staging 
git reset --hard beta

上記のコマンドの後にステージングの履歴が消え、stagingbetaブランチ。

0
Amit Kushwaha