2

リベースを行い、100 個のファイルに競合があるとします。一つ一つ解決していかなければなりません。(N-1) 個のファイルを解決し、ファイル N で作業しているとしましょう。しばらく作業した後、ファイルがめちゃくちゃになっていることに気付きました。だから、もう一度ゼロから解決したい。しかし、(N-1)ファイルを再度解決したくないので、リベースを中止してリベースをやり直したくありません。

ファイル N のみのマージ競合を回復して、最初から解決できるようにすることはできますか?

4

3 に答える 3

1

作業中のファイルに名前が付けられtest.txtており、マージの試行によりファイルに競合マーカーが残っていて、それらの競合を手動で解決するのに失敗した場合は、競合マーカーを使用してファイルを再作成できます。いくつかのコマンドで。

背景として、マージでファイルの競合を手動で解決する必要がある場合、そのファイルの3つの異なるコピー(「ステージ」と呼ばれる)がgitインデックスに残ることを知っておくと役立ちます。ステージ1は、マージされるファイルの2つのバージョンの共通の祖先であり、ステージ2と3は、マージしようとしている2つのブランチの2つのバージョンです。すべてではありませんが、一部のgitユーティリティは、:<stage>:<filename>これらのエントリを参照するための構文を理解しています。

したがって、最初に行う必要があるのは、これら3つのファイルの一時的なコピーをどこかに再作成することです。/tmpここで使用しますが、必須ではありません。

git cat-file -p :1:test.txt > /tmp/test.txt.1
git cat-file -p :2:test.txt > /tmp/test.txt.2
git cat-file -p :3:test.txt > /tmp/test.txt.3

次に、gitplumbingコマンドgit merge-fileを使用して、適切な競合マーカーを含むファイルを再作成します。ここでは引数の順序が重要であり、マージを再実行するときに参照する場合に備えて、このファイルですでに行った作業を保存しておくことをお勧めします。

mv test.txt test.txt.broken
git merge-file -p /tmp/test.txt.2 /tmp/test.txt.1 /tmp/test.txt.3 > test.txt

これは競合マーカーを使用して再作成されますtest.txt(ただし、通常含まれるブランチ名のコメントはありません-本当に必要な場合は、いくつかの-L <branchname>引数を追加する必要があります-入力git help merge-fileして詳細情報を取得できます)。

その時点で、一時ファイルをクリーンアップして、そのファイルの競合の解決を最初からやり直すことができます。終わったらそれを覚えておいてgit add、残りのファイルを続けてください。

于 2013-03-04T21:16:15.590 に答える
1

を探していると思いますgit checkout --merge --path/to/file

于 2013-03-05T06:25:17.120 に答える
0

あまり良い解決策ではないかもしれませんが(あまりgitっぽくないように見えます)、考えられる方法の1つを次に示します。

  1. (N - 1) 個のファイルを一時ディレクトリにコピーします
  2. git rebase --abort
  3. (N - 1) 個のファイルを git dir にコピーします
  4. N番目のファイルで作業します。
于 2013-03-04T19:39:13.343 に答える