2011-10-26 9 views
6

git rebaseが競合を発見したが、ファイルに明らかな問題はないとはどういう意味ですか?問題のファイルには競合マーカーはなく、git mergetoolには「何も結合しない」と表示されます。Git rebaseは何もマージすることなく競合しますか?

オプションは、私がを追加リセットされています:

# Unmerged paths: 
# (use "git reset HEAD <file>..." to unstage) 
# (use "git add/rm <file>..." as appropriate to mark resolution) 
# 
# both modified:  filename.js 

は、どのように私は、これはおよそどのパスを取ることが何であるかを見つけるのですか?このコマンドは、私たちにモードビット、オブジェクト名、およびステージ番号を伝え、細かいマニュアルによると

100644 d2c915b1d632b8ef8fbcf056824fb7fac7824ab9 1 filename.js 
100644 9010798f1d19ac712196b1fc9b0870fd332b1275 2 filename.js 
100644 b3ab7ec50812c73a3ec97bf0985f3226ec13cbc8 3 filename.js 

git ls-files -s filename.jsは3行を示します。モードビットは同じです。だから1、2、3とは何ですか?なぜそれらは両方とも変更されますが、競合マーカーは表示されません。インデックス内の

+1

空白の違いがあります。 – birryree

+0

'git ls-files -s filename.js'を試して、バージョンが実際に異なっているかどうか確認してください。 –

+0

@JoshLeeあなたのコメントに答えて私の質問を更新しました。出力には3つのブロブが表示されますが、そこからどこに行くのかは分かりません。違いを見つけたり、どちらが「追加」や「リセット」するのかを教えてください。 –

答えて

7

バージョンは21をマークし、そして3は、次のような意味があります。それはあなたがマージしている2つのコミットの共通の祖先であったよう

  1. ファイルを。
  2. ファイルはHEADにあります。つまり、マージしたときのあなたの現在のコミットです。
  3. HEADにマージしようとしているコミットのファイル。

この情報のソースはthe git manual's useful section on resolving conflictsです。

git statusの出力は、勿論、ファイルが、共通の祖先からマージしている2つのコミットによって異なる方法で変更されたことを示しています。

しかし、ファイル内にコンフリクトマーカが表示されない理由は、ブロブのオブジェクト名(ハッシュ)が異なる場合、出力にgit ls-files -sがあることは、それらが確かに持っているバイト単位であることを示しています異なる内容。あなたの作業コピーにあるファイルに満足している場合は、git add filename.jsを実行してからgit rebase --continueを実行します。しかし、いずれにしても、その違いが何であるかを知りたいかもしれません。これを行うには、私は次のことをしようとするだろう:

git diff :2:filename.js filename.js 

... HEADにおけるバージョン間の相違点と現在の作業コピーが表示されます。同様に、試してみてください:

git diff :3:filename.js filename.js 

...マージされたバージョンと作業コピーの違いを確認することができます。

1

git ls-files -s1233-way mergeの「ステージ」を表す:1は共通の祖先である、2は、現在のブランチヘッドであると3は他のブランチヘッドです。Linuxでは、以下のコマンドを試して、ファイルの違いを確認することができます。

$ git cat-file blob d2c915b1d632b8ef8fbcf056824fb7fac7824ab9 | xxd -ps 
$ git cat-file blob 9010798f1d19ac712196b1fc9b0870fd332b1275 | xxd -ps 
$ git cat-file blob b3ab7ec50812c73a3ec97bf0985f3226ec13cbc8 | xxd -ps 
関連する問題