2011-06-27 14 views
10

クリーンな作業ディレクトリのアップストリームからgit pullを送り、マージの競合を表示します。私は一時間ほど手作業でそれらをリセットして、何かを壊してしまったと思って、再び起こった。クリーンディレクトリからgit pullにマージの競合があります

これはgitのバグですか?私はそれについてほとんど知らないので、私は自分自身にこれをしたことを受け入れることを完全に喜んでいる。私はSolarisの11 Expressを使用してい

$ git status 
# On branch master 
nothing to commit (working directory clean) 
$ git pull 
Auto-merged xxxx/xxxx/xxxx.xxx 
CONFLICT (content): Merge conflict in xxxx/xxxx/xxxx.xxx 
Automatic merge failed; fix conflicts and then commit the result. 

は、ここに私の切り捨てられた出力(それは約9ファイルに何が起こるが、私はスペースを節約したい、とファイル名は無実を保護するために変更されている)ですパッケージのデフォルトのgit。

$ uname -a 
SunOS xxxx 5.11 snv_151a i86pc i386 i86pc Solaris 
$ git --version 
git version 1.5.6.5 
$ pkg list git 
NAME (PUBLISHER)        VERSION   STATE  UFOXI 
developer/versioning/git      1.5.6.5-0.151.0.1 installed ----- 

私はこの質問が見つかりました:Git pull fails: You have unstaged changes. Git status: nothing to commit (working directory clean)、最も近いようだが、不満足な答えを持っています。

リポジトリ全体を削除せずに新しいクローンを作成することなく、これをどのようにして得ることができますか?

答えて

15

あなたの作業ディレクトリはクリーンかもしれませんが、サーバー上に存在しないローカルで作成したコミットが1つ以上あります。あなたが引っ張ると、gitはこれらのローカルコミットをサーバ上のものとマージしようとしますが、コードの同じ領域を変更するので、衝突します。あなたが競合する変更を処理し、上に移動する方法はgitに伝える

  1. Fix the conflicts.:ここ

    あなたのオプションは、基本的に煮詰めます。

  2. 競合を修正して修正します(git pull --rebase)。これは1と大きく異なるわけではありませんが、あなたの変更が一度も公開されていない(つまり一度もプッシュされていない)場合、これはあなたにクリーナー(線形)履歴を与えるかもしれません。
  3. ローカルの変更を破棄し、リモコンをgit reset --hard remotename/remotebranchと一緒に使用します。これにより、ローカルでコミットした変更は失われますが、他の場所にはプッシュされません。
+1

私はそのブランチにローカルコミットを持っていませんが、#3はトリッキーでした。 – bahamat

+4

便利な答えは、私が雑草から自分の道を見つけるのを助けました。私の場合は、支店で「git rebase master」を実行しました。その後、私は上記のようなマージの競合がありました。 'git merge --abort'と 'git pull --rebase'で解決しました。ありがとう! – wndxlori

0

マージの競合を解決してコミットしますか?クリーンな作業ディレクトリを持っていても、何らかの作業をコミットした場合、それが入ってくる変更と競合している場合、マージの競合が発生します。答えbdonlan に追加

0

、あなたは(あなたのローカルリポジトリ上の)いくつかのコミットをしていたときにそれが起こることができますが、リモートリポジトリは(ローカルのコミットファイルを比較するいくつかの進歩があった)先行しています。

私はこれらの競合のためにプッシュもプルもできなかったときにちょっと立ち往生しました。

は、実行しようとしました 'をリベース' や運で 'リセットはを--hard'。

私のために働いた唯一の解決策は、1つのコミットとプルを取り戻すことでした。

次の手順に従い:

警告:これは、あなたが最初にこのコードをあなたの最後の変更なので、バックアップして変更を失う原因となる破壊的な操作です!

  1. ローカルリポジトリの使用「Gitのログ」とリモコンのコミットログにこれを比較する - あなたのコミットのいずれかが使用 "Gitは--hardリセット
  2. をプッシュしていなかったかを理解します「リモートリポジトリへのあなたのコードのフィット感は前回に戻ります(私が使用した」Gitは--hard HEAD^をリセット「わざと負けるために私の以前のコミット)
  3. 今」のgitは「動作します引き出します。それを使用してリモートサーバーから最新のコードを取得する
関連する問題