Gitマージエラー


264

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

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


9サインインアウトでコミットされていないコードを失いたくないという意味ですか?
Mauvis Ledford、

@Mauvis:私はすでにブランチ9サインインアウトでコードをコミットしました。
Sayanee、

回答:


531

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

git reset --merge

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


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

基本的にあなたがしたいことは、トピックブランチ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

1
マーク、私が今マージするために再びエラーを受け取った後、私はようやくあなたが言っていることを理解しました。ただし、次のエラーが発生しています::::::::::::: Sayanee:twitter sweska $ git checkout master error:ローカルでの次のファイルへの変更は、checkoutによって上書きされます:webrat.logコミットしてくださいブランチを切り替える前に、変更または隠しておきます。中止:::::::::::::::::ブランチでwebrat.logを使用してマスターにマージするには、どうすればよいですか?
サヤニー、

1
@Sayanee:これは、異なる状況で発生する別のエラーです。混乱した場合は、新しい質問をすることをお勧めします。(しかし、要約すると、gitはブランチの切り替えを停止しますwebrat.log。コミットされていない変更がで上書きされるためです。)
Mark Longair

私はすべてをrmして再クローンするだけでした。しかし、これはより良いです。
sudo 2017年

43
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

3
チェックアウトを強制するのではなく、Markが以下に提案するようにマージをリセットする方がずっとクリーンだと思います。
トーマス

8

で提案されているようにgit status

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

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

私は以前git addはマージを終えていて、git checkoutうまくいきました。



-6

git commit -m "マージされたマスターが競合を修正しました。"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.