web-dev-qa-db-ja.com

Git:マージ中に部分的なコミットを行うことはできません(SourceTree)

SourceTreeを最新バージョンに更新した後、私はこの問題に取り組んでいます。次のシナリオを想定します。

ファイル[〜#〜] a [〜#〜][〜#〜] b [〜#〜]および[〜#〜]がありますc [〜#〜]バージョン管理下にあり、ブランチは1つだけです。私の作業コピーでは、ファイルにいくつか変更を加えます[〜#〜] a [〜#〜]なので、ファイルと同様にA 'になります- [〜#〜] b [〜#〜]からB 'へ。作業コピーの他の誰かがファイルに変更を加えます[〜#〜] c [〜#〜]-> C '

変更をファイルにステージングしてコミットしますBのみ。したがって、新しいリビジョンがあります:[〜#〜] a [〜#〜]B '[〜#〜] c [〜#〜 ]と作業コピーA 'B'[〜#〜] c [〜#〜]

もう1人は変更をコミットするため、リビジョンを作成します[〜#〜] a [〜#〜][〜#〜] b [〜#〜]C 'そしてそれをOriginにプッシュします。

そして、ここに来る。プルを実行すると、マージの変更(C ')が発生します。そして[〜#〜] a [〜#〜]B 'C'で構成されるリビジョンをコミットしたいと思います。変更したファイル[〜#〜] a [〜#〜]を使用して、今は何もしたくありません。ただし、GIT、SourceTree、またはそれぞれが次のエラーで失敗します。

致命的:マージ中に部分的なコミットを行うことはできません。

ファイルへの変更をステージングまたは破棄するまで[〜#〜] a [〜#〜]

以前のバージョンのSourceTreeはこの動作を公開していなかったと思います。

2017/05更新

最新のSourceTreeバージョン2.0.20.1で表示され、この問題は解決されています。しかし、私が本当に嫌いな「バグ」(新機能)がたくさん含まれているので、このバージョンに更新したいことを確認してください。

9
Jan Drozen

致命的:マージ中に部分的なコミットを行うことはできません。

これは、マージがまだ進行中であることを示しています。まだ解決する必要があるいくつかの競合がある可能性があります。

ドロップダウンボックスからスクリーンショットとしてConflictsを選択すると、三角形のアイコンが付いた競合ファイルのリストが表示されます。これらを解決してからコミットすると、問題が解決するはずです。

enter image description here

この投稿は、マージの競合を解決するために外部ツールを構成して使用する方法の簡単なアイデアを提供する必要があります- インタラクティブに(視覚的に)SourceTree/gitで競合を解決する方法

それでも解決できない場合は、変更を隠しておくことができます。 Originから引き出し、スタッシュを適用して修正します。

編集

「カスタムアクション」を使用して、このようなすべての操作を自動化することもできます。 stash >> pull >> stashを実行するための1つのサンプルスクリプトを以下にコピーします

git -c diff.mnemonicprefix=false -c core.quotepath=false stash save temp
git -c diff.mnemonicprefix=false -c core.quotepath=false fetch Origin
git -c diff.mnemonicprefix=false -c core.quotepath=false pull Origin <<local path goes here>>
git -c diff.mnemonicprefix=false -c core.quotepath=false submodule update --init --recursive
git -c diff.mnemonicprefix=false -c core.quotepath=false stash apply stash@{0}
1
Arvin

これに対する次の答え 質問 は私のために働きました。

「手動で。git/MERGE_HEADを削除すると、Gitはマージを実行したことを認識できなくなります。これにより、以前と同じように、インデックスの変更をコミットします。」

1
javaPlease42