115

Gitを使用してコマンドラインでファイルをマージしようとしましたが、マージが中止されたことを示すエラーメッセージが表示されました。

これで終わりだと思いましたが、ファイルにgitmarkが含まれていることに気付きました。そのようです:

start =
    expression

validchar = 
    [0-9a-zA-Z_?!+\-=@#$%^&*/.]

integer = 
<<<<<<< HEAD
    digits:[0-9]+
        { return digits.join(""); }
=======
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages

ファイルは私ではなく編集されており、次のように挿入された行が表示されます。

  • 記号未満の後のHEAD(<<<<<<< HEAD
  • 変更されたコードの行
  • 等号の文字列(=======
  • コードの新しいバージョン
  • 大なり記号とブランチの名前で始まる別の行(>>>>>>> gh-pages

さらに悪いことに、ファイルの内容が正しくなくなっています。これらのファイルを通常の状態に戻し、gh-branchで行った変更をmasterブランチにマージする方法を知っている人はいますか?

4

5 に答える 5

107

それらは競合マーカーです。まだマージ中ですが、Gitが自動的にマージできない部分がいくつかありました。これらのパーツを希望どおりに手動で編集してから、結果をコミットする必要があります。


たとえば、特定のケースでは、おそらく次のように解決する必要があります(注-右側の矢印/テキストは単なるメモであり、ファイルに入力するものではありません)。

integer = 
<<<<<<< HEAD                                  <-+ remove the bits here
    digits:[0-9]+                               |
        { return digits.join(""); }             |
=======                                       <-+
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
>>>>>>> gh-pages                              <-- and this

したがって、ファイルを次のように保存します...

integer = 
    sign:"-"* digits:[0-9]+
        { return sign + digits.join(""); }
于 2012-05-18T17:44:24.327 に答える
26

絶対に「gitstatus」から始めて、何が得られるかを確認してください。マージを中止した場合(またはマージを中止した場合)、作業ディレクトリに競合するファイルがある場合は、問題が発生しました。Gitステータスはあなたがどこにいるかを教えてくれます。その後、いくつかのオプションがあります。マージコミットは、手作業で解決する必要がありますが、これは困難な場合があります。または、次のようなツールを使用して解決する必要があります。

git mergetool

ファイルがマージが必要であるとリストされている場合、マージツールは機能します。

次のいずれかを実行することもできます。

git checkout --ours -- /path/to/conflicted-file       # this is probably the one you want
git checkout --theirs -- /path/to/conflicted-file

:1:filename構文を使用して、さまざまなバージョンを確認できます。説明については、こちらをご覧ください。ただし、上記のすべては、「gitstatus」がファイルをマージが必要であると示していることを前提としています。

最後に、常に次のオプションがあります。

git reset --hard   # sounds like --hard is what you need but check other options
于 2012-05-18T19:10:24.547 に答える
6

すべての答えは正しいですが、すべての競合マークを自動削除し、ファイルを自動変更してHEADを維持したい場合は、次のような独自のbashスクリプトを作成できます:-

スクリプト例:

# vim /usr/sbin/solve.git

(以下を追加)

#!/bin/bash
for f in $(grep -Rl '^>>>>>>> ' --include="*.php" --include="*.css" --include="*.js" --include="*.html" --include="*.svg" --include="*.txt" .)
do
sed -i -e '/^=======/,/^>>>>>>> /d' -e '/^<<<<<<< /d' $f
sed -i -e '/^>>>>>>> /d' $f
echo "$f Fixed"
done
git add . ; git commit -am "[+] Resolved on `date` from `hostname` by `whoami`" --no-verify

# chmod 755 /usr/sbin/solve.git

&GITリポジトリ/パスで実行して解決します:

$ cd <path_to_repo>
$ solve.git

注意:-上記のファイル拡張子はphp、css、js、html、svg&txtです。

于 2016-05-05T11:13:41.517 に答える
0

Atomでは、一部のファイルが解決されたマージの競合をドライブに保存しないという問題があったため、手動で[保存]をクリックする必要がありました。理解するのにかなりの時間がかかりました。

于 2018-04-05T21:57:29.350 に答える
0

私はこの質問から来ています。そして、ファイルを手動で編集するのではなく、半分マージされたファイルをマージする自動化された方法が必要でした(他の回答で提案されているように、私はあまり快適ではありません)。これが私がnetbeansを介して行ったことですが、コマンドラインを介して行うこともできます。

さて、これは、の直後に、merge->add->commit混乱したことに気づき、プロセスをやり直したい場合にのみ機能することを覚えておいてください。

ステップ1:前のコミットにリセットします。

git reset --hard a992a93f9312c6fa07c3a1b471c85e9fbf767d0e

ステップ2:ブランチのマージを再試行します

git merge --ff origin/feature/YOUR-Branch_here

この時点で、GUIを使用している場合は、マージウィンドウが表示されます。その後、通常どおり続行できます。

于 2018-12-11T16:14:48.660 に答える