1. ホーム
  2. git

[解決済み] Git マージエラー

2022-02-27 11:39:29

質問

というgitブランチを持っています。 9-sign-in-out で、完全に動作するコードがあり、それをマスターにしたいのです。現在、私はmasterブランチにいます。

$ git branch
9-sign-in-out
* master

に切り替えようとしています。 9-sign-in-out という分岐があるのですが、それができません。

$ git checkout 9-sign-in-out
app/helpers/application_helper.rb: needs merge
config/routes.rb: needs merge
error: you need to resolve your current index first

マスターブランチのエラーをすべて無視して 9-sign-in-out ブランチがマスターになるのでしょうか?たぶん、git リベース ? のコードを失いたくないのです。 9-sign-in-out のブランチを作成します。

解決方法は?

これらのエラーメッセージの意味を理解することは価値があります。 needs mergeerror: you need to resolve your current index first は、マージが失敗し、それらのファイルにコンフリクトがあることを示しています。 もし、あなたが行おうとしていたマージが結局は悪い考えであったと判断したのであれば、次のようにして物事を正常に戻すことができます。

git reset --merge

しかし、そうでない場合は、それらのマージの競合を解決する必要があります。 git マニュアルに記載されているように .


どちらかの手法で対処したら、次は 9-sign-in-out のブランチを作成します。 ブランチの名前を変更するだけでは問題があります。 9-sign-in-out から master で提案されているように wRARさんの回答 というのは、もし以前の master ブランチを誰かと共有している場合、2 つのブランチの歴史が分かれると、書き直された歴史を公開することになり、問題が生じるからです。

基本的にあなたがしたいことは、トピックブランチをマージすることです。 9-sign-in-outmaster が、トピックブランチにあるファイルのバージョンは正確に維持します。 これは以下の手順でできます。

# Switch to the topic branch:
git checkout 9-sign-in-out

# Create a merge commit, which looks as if it's merging in from master, but is
# actually discarding everything from the master branch and keeping everything
# from 9-sign-in-out:
git merge -s ours master

# Switch back to the master branch:
git checkout master

# Merge the topic branch into master - this should now be a fast-forward
# that leaves you with master exactly as 9-sign-in-out was:
git merge 9-sign-in-out