アップストリームの変更をブランチにマージしようとしているときに競合が発生しており、それらを解決する方法がわかりません。
独自のフォークを作成しました。クローンを作成しました。分岐のブランチに変更を加え、コミットしてプッシュしました。しかし、その後、メインフォークが更新され、次のようにアップストリームをマージして自分のフォークを更新しようとしました。
$ cd repo-name
$ git remote add upstream git://github.com/username/repo-name.git
$ git fetch upstream
$ git merge upstream/master
マージでは、ファイルに何らかの問題があり、自動マージが機能しないと言われています。自分で修正して再マージするように指示されます。そこで、実際にメインフォークのGitHubの(上流)リポジトリに移動し、新しいファイルのすべてのコードをフォークのファイルにコピーして、再度マージを試みました。次に、gitは私にこのエラーを与えます:
致命的:マージされていないファイルがあるため、「マージ」はできません。作業ツリーでそれらを修正してから、必要に応じて「git add/rm」を使用して解決をマークし、コミットするか、「git commit -a」を使用してください。
私が除外している議論はありますか?バカなことをしていますか? 「マージされていないファイル」とはどういう意味ですか?ファイルをマージすることの全体のポイントではありませんか?マージする前に変更をコミットする必要がありますか?
表示されていることは、自動マージがファイル内の競合を解決できなかったことを意味します。これらの競合を手動で解決する必要があります。実行git mergetool
またはgit gui
。
「git merge」コマンドは、別のブランチからの変更を現在のブランチに組み込みます。マージがクリーンで、競合がないことを意味する場合、コミットします。マージには競合があったため、コミットしませんでした。競合を解決する必要があります。
アップストリームリポジトリからコピーをプルすることは、それを行う1つの方法です-アップストリームリポジトリのバージョンを受け入れます。 「git checkout --theirs conflicting_file.txt」を使用してgit内でそれを行うことができます
ファイルを編集して目的の形状にすることも、別の方法です。
修正したら、「git add conflicting_file.txt」を使用して追加し、コミットする必要があります。これで作業コピーはクリーンになり、さらにハッキングできるようになります。がんばろう。
Gitでは、マージrefusesがローカルの変更を保護するために開始する場合もあります。これは、次の2つの場合に発生する可能性があります。
リポジトリにcomcommitted changesがあり、merge と競合します。 gitは、次のメッセージとのマージを拒否します。
エラー:次のファイルへのローカルの変更はマージによって上書きされます。 foo 変更をコミットするか、マージする前にそれらを隠してください。 中止
次に、最初に変更をコミットする必要があります(git commit -a
またはgit add
+ git commit
)、またはgit stash save
でそれらを隠します。
あなたはの中にいます未完 merge-y操作。たとえば、いくつかの競合がありました
foo CONFLICT(コンテンツ)の自動マージ:foo 自動マージの競合が失敗しました。競合を修正してから結果をコミットします。
競合の解決が完了していない(ファイルを編集し、git add
で解決済みとしてマークするか、git mergetool
を介してグラフィカルマージツールを使用する)か、git commit -a
で最終マージコミットを作成しないか、git reset --hard
でマージを中止しなかった( NOTE:これにより、すべての変更が破棄され、競合の解決に関する作業が失われます!!!)。
または、2番目のgit merge
の実行速度が速すぎるか、git merge
の代わりにgit commit
を使用してマージコミットを作成しました。
エラー:マージされていないファイルがあるため、 'merge'はできません。 ヒント:作業ツリーでそれらを修正し、 hint:を使用してから 'git add/rm' as hint:解決をマークしてコミットするのに適しています。 hint:または 'git commit -a'を使用します。 fatal:未解決の競合のために終了します。 。]
説明されているように競合を解決します。古い マージを完了して楽しんでください Junio C Hamanoによる記事でgit commit
を使用してマージを終了するか、マージを破棄するか、隠します。次に、この2番目のマージを作成するつもりであれば、それを行うことができます。
Sidenote:デフォルトでは、git-aware Shell Promptは、マージ、リベース、またはパッチの適用中かどうかを示します(git am
操作)。作業ディレクトリが汚れているかどうかを表示するように設定することもできます(最新バージョン、つまりHEADとは異なります)。
git commit
ではなく、git merge
(ファイルの追加後)を2回実行します。
また、競合解決により、マージに役立つファイルが作成されます。 git mergetool
もご覧ください。
マージを解決した後、git add
を使用して、変更したファイルをインデックスに追加し、コミットする必要があります(メッセージのように)。これはgitに「はい、本当にこれらの変更を行いたい」と言っています。
コマンドラインインターフェイスを使用している場合は、(通常またはマージをコミットする前に)コミットする前に常にgit add
を使用してください。 magitなどのフロントエンドはこれを合理化できるため、毎回「git add」と入力する必要はありません。