web-dev-qa-db-ja.com

Gitマージエラー

私は9-sign-in-outというgitブランチを持っていて完璧に機能するコードを持っています、そしてそれをマスターに変えたいのです。私は現在マスターブランチにいます。

$ 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

どうすればすべてのmasterブランチのエラーを無視して9-sign-in-outブランチをmasterに変えることができるでしょうか。多分git リベース ?しかし9-sign-in-outブランチのコードを失いたくはありません。

231
Sayanee

これらのエラーメッセージが何を意味するのか理解する価値があります - needs mergeerror: you need to resolve your current index firstはマージが失敗したこと、そしてそれらのファイルに衝突があることを示します。結局、マージしようとしたことが悪い考えであると判断した場合は、次のようにして通常の状態に戻すことができます。

git reset --merge

ただし、それ以外の場合は、マージの競合、 gitマニュアルに記載されているとおり を解決する必要があります。


どちらかの方法でそれに対処したら、9-sign-in-outブランチをチェックアウトできるはずです。 wRAR's answer で示唆されているように、単にあなたの9-sign-in-outmasterにリネームすることに関する問題は、あなたが以前のマスターブランチを誰かと共有した場合分岐すると、書き換えられた履歴が公開されます。

基本的にあなたがしたいことはあなたのトピックブランチ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
468
Mark Longair
git checkout -f 9-sign-in-out # change branch, discarding all local modifications
git branch -M master # rename the current branch to master, discarding current master
38
wRAR

git statusで示唆されているように、

Unmerged paths:                                                                                                                                
(use "git add <file>..." to mark resolution)                                                                                                 

    both modified:   a.jl                                  
    both modified:   b.jl

私はgit addを使ってマージを終えました、そしてgit checkoutはうまく動きます。

5
Jingpeng Wu