310

完全に機能するコードで呼び出されたgitブランチがあり、9-sign-in-outそれをマスターに変換したいと思います。私は現在マスターブランチにいます。

$ 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しかし、私はブランチのコードを失いたくありません。

4

6 に答える 6

650

これらのエラー メッセージの意味を理解することは価値がneeds mergeありerror: you need to resolve your current index firstます。つまり、マージが失敗したこと、およびそれらのファイルに競合があることを示しています。実行しようとしていたマージが最終的に悪い考えであると判断した場合は、次の方法で通常の状態に戻すことができます。

git reset --merge

ただし、それ以外の場合は、git マニュアル で説明されているように、これらのマージの競合を解決する必要があります。


いずれかの手法で対処したら、9-sign-in-outブランチをチェックアウトできるはずです。wRARの回答で示唆されているよう9-sign-in-outに、に名前を変更するだけの問題は、以前のマスターブランチを誰かと共有した場合、2つのブランチの履歴が分岐した場合、書き直されて公開されるため、問題が発生することです。歴史。master

基本的にやりたいことは、トピック ブランチ9-sign-in-outをにマージすることですが、トピック ブランチ内masterのファイルのバージョンを正確に保持することです。これは、次の手順で行うことができます。

# 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
于 2011-05-15T07:23:19.517 に答える
46

ブランチを変更し、すべてのローカル変更を破棄します

git checkout -f 9-sign-in-out 

現在のブランチの名前をマスターに変更し、現在のマスターを破棄します

git branch -M master 
于 2011-05-15T05:58:39.157 に答える