web-dev-qa-db-ja.com

マージ後のコミット時のGitエラー - 致命的:マージ中に部分的なコミットはできません

私は競合で終わったgit pullを実行しました。私は衝突を解決しました、そしてすべては今大丈夫です(私は同じくmergetoolを使いました)。

git commit file.php -m "message"を使用して解決したファイルをコミットすると、エラーが発生します。

fatal: cannot do a partial commit during a merge.

私は以前に同じ問題を抱えていて、commitで-aを使うことは完全にうまくいきました。すべての変更をコミットしたくないので、これは完璧な方法ではないと思います。私は別々のコメントで別々にファイルをコミットしたいです。どうやってやるの?マージ後にgitがユーザーにファイルの個別コミットを許可しないのはなぜですか?私はこの問題に対する満足のいく答えを見つけることができませんでした。

251
pMan

Commitコマンドに "-i"を追加すると、この問題が解決することがわかりました。 -iは基本的に、コミットする前に追加のファイルをステージングするように指示します。あれは:

git commit -i myfile.php
403
MikaelHalen
git commit -am 'Conflicts resolved'

これは私のために働きました。あなたもこれを試すことができます。

91
Pratip Ghosh

ほとんどの場合はgit commit -iを使用できますが、うまくいかない場合は

あなたはgit commit -m "your_merge_message"をする必要があります。マージ競合の間は、1つのファイルをマージすることはできません。

  1. 競合するファイルのみをステージングする(git add your_file.txt
  2. git commit -m "your_merge_message"
28
aWebDeveloper

あなたはおそらくコミットしようとしていないことで矛盾を起こしたでしょう。 gitはあなたが物事を独立してコミットさせることはできません(それはすべてマージの一部だからです)、そのファイルをgit addそしてgit commit -m "Merge conflict resolution"する必要があります。 -igit commitフラグはあなたのために追加を行います。

13
Paul Price

Gitマージの衝突を解決するときにgit commitで-mを忘れたときにこれを得ました。

git commit "commit message"

あるべき

git commit -m "commit message"
10
wgeorge

エラーメッセージに示されているように、マージ後に部分的なコミットはできません。 file.phpだけをコミットするのではなく、すべての変更をコミットする必要があります。

これでうまくいくはずです。

git commit -m "Fixing merge" 
7
Asim Jalis

あなたのマージはアクションの途中で止まりました。ファイルを追加してから、「git commit」してください。

git add file_1.php file_2.php file_3.php git commit

乾杯

6
Moyshe Zuchmir

チェリーピッキングとコミットのファイル全体を好きなように設定したいだけの場合は、

git reset --soft <ID-OF-THE-LAST-COMMIT>

あなたをそこに連れて行きます。

ソフトリセットは、現在のHEADを指すポインタを、指定したコミット(ish)に移動しますが、ファイルは変更しません。ハードリセットするとポインタが移動し、すべてのファイルがそのコミットの状態(ish)に戻ります。つまり、ソフトリセットを使用すると、マージステータスをクリアできますが、実際のファイルへの変更を保持してから、好みに応じて個別にコミットまたはリセットできます。

5
Zds
  1. プロジェクトディレクトリに移動します。
    1. 隠しファイルを表示する(.gitフォルダが表示されます)
    2. .gitフォルダを開く
    3. mERGE_HEADを削除します。
    4. もう一度コミットする
    5. gitはgitがロックされているとあなたに言ったなら.gitフォルダに戻ってindex.lockを削除
    6. もう一度コミットしてください。今回はすべてうまくいきます。
3
Ahmed Samir

私自身のために、私はすべてのファイルを解決する前にマージをコミットしようとしたときにSourceTreeで起こりました。それから最後のファイルを解決したとマークしましたが、コミットしようとしたときにまだこのエラーが発生していました。私はSourceTreeを閉じてそれを再開し、それからそれはうまくコミットしました。

3
Justin

私はこれを完全に異なるアプローチで、Xcodeのソース管理だけを使って解決しました。

背景:別のチームがリモートのGitリポジトリへの変更をプッシュしました(Beanstalk経由)。私の側では、.xcodeprojファイルは別のディレクトリに入ってきましたが、変更は反映されませんでした。後でコミットしようとしたときに、XcodeでTree Conflictエラーが発生しました。

Tree Conflict Screenshot

Xcodeを使って修正するのはほとんど不可能なので、.xcodeprojファイルをGitサーバーからダウンロードしたバージョンに置き換えました。結果... Xcodeプロジェクトは片付けられたように見えましたが、破損したPullからのすべての更新は私が行った変更として表示されており、コミットのためにステージングされていました。

Look at all these Mods and Added files

しかし、コミットしようとしたときに、ここで説明したのと同じ "致命的:マージ中に部分的なコミットを実行できません"というエラーが表示されました。

これが私が問題を解決した方法です...(今、私は新人プログラマーであることを理解しているので、私はいくらかの理解を欠くことができました...しかし私の無知は私にこれをする別の方法を見つけることを導きました。)二次ブランチに分岐し、そのブランチに切り替えます。次に作業コピーを作成し、その作業コピーのディレクトリを元のプロジェクトディレクトリの外側に配置しました。 (これが必要かどうかはわかりませんが、他のトラブルシューティング手法を読むときに行ったことです。)次に、ブランチをマスターに切り替えました。ここで、すべてのStagedファイル(Commitへの変更)がなくなりました。すべてのファイルが相手によって行われた最新の変更に確実に更新されるように、私はThirdBranchと呼ばれる新しいブランチを作成しました。これはすべてのファイルを複製し、それをGit Serverにプッシュします。 ThirdBrachブランチ私は(行ごとに)プッシュしただけで、相手方によるすべての変更は私のXcodeに反映されました。これは私のマスターリポジトリとGitマスターリポジトリが同じであることを意味していました、それは私がXcodeだけを使って問題を解決したことを証明します。

私が今述べたことを超えて、どうやって私に尋ねないでください...そして確かに私が省いたギャップを埋めてください。私はこれで新しいです、そして、私はすべてを理解しません。たぶん経験豊富なプログラマーが無関係な情報を関連性のあるものから切り離してこの技術をよりはっきりと再現できる可能性があります。

これは、重複する質問に対する重複した回答です。 Xcode Git Mergeが失敗しました

3
Plexander

git commit -i -m 'merge message'は私のために働きませんでした。と言いました:

fatal: No paths with --include/--only does not make sense.

FWIW、私はこのメッセージを受け取っていたので、私は この関連した質問 を通してここに来ました:

fatal: You have not concluded your merge (MERGE_HEAD exists).

私はmergetoolも試しました、そしてそれはNo files need mergingを言いました。非常に紛らわしいです!だからMERGE_HEADはマージが必要なファイルにはありません。

最後に、私はこのトリックを使用して、変更されたファイルのみを追加しました(未追跡のままにしておきたいファイルがあるため、ツリー内のすべてのファイルを追加したくはありません)。

git ls-files -m | xargs git add

それから私はついに(!)コミットしてプッシュアップすることができました。 gitがあなたにこれらの状況で何をするべきかについてのより良いヒントを与えてくれたらそれは確かにいいだろう。

2
szeitlin

マージ中、Gitはあらゆる種類の理由で親ブランチを追跡したいと考えています。あなたがやりたいことはgitが見ているようにマージではありません。手動でリベースまたはチェリーピックをすることをお勧めします。

2
Talljoe

すべてのコメントを読んだ後これは私の決議でした:
私はそれをコミットするよりも「追加」しなければなりませんでした:

$ git commit -i -m support.html "doit once for all" [master 18ea92e] support.html
1
FelipeNutz

もしそれがソースツリーにあれば、衝突が解決された後にファイルを解決済みとして明示的にマークするべきです。 衝突しないように解決されたファイルを選択してください。それから[アクション] - > [競合の解決] - > [解決済みのマーク]の順にクリックします。複数のファイルがある場合は、すべてに同じことをしてください。今すぐコミット.

1
cgr

ソースツリーまたは他のGUIを使用している場合は、すべてのファイルがチェックされていることを確認してください(マージ後)。

0
luky