2012-11-19 15 views
15

ブランチをリベースしようとしていますが、gitが失敗するマージアクションを実行しようとしています。これを止めるにはどうすればいいですか?空白のためにgit rebaseが失敗する

# git rebase -f --onto master~2 master~ master 
First, rewinding head to replay your work on top of it... 
Applying: r1002 - CS 1.0.23 
Using index info to reconstruct a base tree... 
M about.html 
<stdin>:68: trailing whitespace.      
<stdin>:115: trailing whitespace. 
<stdin>:201: trailing whitespace. 
<stdin>:2369: trailing whitespace. 
<stdin>:2385: trailing whitespace. 
warning: squelched 2305 whitespace errors 
warning: 2310 lines add whitespace errors. 
Falling back to patching base and 3-way merge... 
Auto-merging about.html 
CONFLICT (content): Merge conflict in about.html 
Failed to merge in the changes. 
Patch failed at 0001 r1002 - 1002 
The copy of the patch that failed is found in: 
    /local/melder/tmp/test/.git/rebase-apply/patch 

When you have resolved this problem, run "git rebase --continue". 
If you prefer to skip this patch, run "git rebase --skip" instead. 
To check out the original branch and stop rebasing, run "git rebase --abort". 

ご覧のとおり、2000個以上の空白文字のエラーがありますが、手でマージするのは簡単ではありません。

編集:サイドステップにこの今の私がしたマージなし:

# git add -A 
# git rebase --continue 

編集:用事それは愚かな考えです。

答えて

5

これは問題を解決するものではありません。あなたのファイルに矛盾マーカーがあります!

空白の問題は警告であり、正当な競合はないはずです。解決する悪夢のようなファイルの場合は、手作業で再構築する必要があります。これはあなたが何をやっているかによって異なります。

何度も2つの拠点が異なっているため、あなたがコミットしていることによって、この怪物の紛争に対処できます。私は、リベースワークフローを明確にして、マージ/リセットを購読する傾向があります。 http://dymitruk.com/blog/2012/02/05/branch-per-feature/ 問題が行末などの空白の問題のみである場合は、最初にフィルタブランチまたは対話型のrebaseを実行して、各コミットの空白を取得することでリポジトリをクリーンアップできます一貫している。

また、私は、3またはPerforce Mergeを超えて競合解決を行うために使用します。 BC3は構文を認識しており、空白を最善に処理する必要があります。何度も、それはあなたのために紛争を解決し、あなたはちょうど続けることができるので、それは開くことさえありません。

+1

うーん...あなたは正しい、それは良いことではない。私はリベース-Xの戦略を使ってみました。私は、このリベースプロセスを自動化しようとしています。レポに実際の衝突はないはずです。私は、空白のエラーはunix/windowsの動きに起因すると信じています。私は可能な限り回避したいと思います。 – melder

1

diffビューア(特にGUIを使っている人)の多くは、空白の変更を処理する方法を選択できると思います。

としてmeldのようなものを使用して、これらの競合を自動修正することをお勧めします。 meldが起動されたら、それは空白処理ポリシー(タブのPreferencesパネルから)を設定し、それらの変更を自動調整します。

+0

お返事ありがとうございますが、私はこのプロセスを自動化したいと思います。私は、異なるシステムで作業し、さまざまなOS上でコードを動かす開発者のために、空白の問題がある非常に大きなreposを処理しています。私がそこに行って、何百ものものがあり、それらの中に何千もの空白の不一致があると、すべての単一リポジトリをマージするのは現実的ではありません。 – melder

1

私はこのような問題をこのように解決今日:

REMOVE_AFTER="3cd7a0db76ff9dca48979e24c39b408c" 
REPO="[email protected]:company/repo.git" 
cd ~/tmp 
git clone $REPO gitfix 
cd gitfix 
git checkout --orphan temp $REMOVE_AFTER 
git commit -m "Truncated history" 
git rebase --strategy=recursive --strategy-option=theirs --onto temp $REMOVE_AFTER master 

あなたが削除したファイルによって引き起こされるCONFLICT (modify/delete)競合を取得リベースの間に、あなたはこのようにそれを解決することができた場合:

git rm path/to/both/deleted/file 
git rebase --continue 

リベース中に他の競合が発生した場合は、手動で修復する必要があります。その後、修復する必要があります。

終了したら、リベースがAll done.が次にあなたができると言う:

git branch -D temp 

今すぐ結果を確認します

git log --format=oneline 
+0

REMOVE_AFTERはどの分岐/変更に参照されますか? –

+1

@EdRandallは正確に覚えていません。私は、ファイルが削除されたために競合を解決するために修正が加えられたと思います。ですから、私はREMOVE_AFTERがgit commitであり、その後に競合するコミットが起こったと思います。 –

11

を、私は今日、同じ問題に直面した:リベースが原因空白のエラーによって引き起こされる競合に失敗します。

git rebase -Xignore-space-at-eol <newbase> 
whitespaceオプション( git rebase --whitespace=fixgit rebase --whitespace=nowarn)のためのさまざまな設定を使用して、失敗した試験の後 、私のために働いたソリューションは、(必要に応じて任意の実行中は、最初のリベース git rebase --abort)を再帰的マージ戦略に空白のエラーを末尾に無視することでした

空白のエラーの種類に依存して、オプション-Xignore-space-change-Xignore-all-spaceが役に立ちます。私はオプション--ignore-whitespaceも働いていたかわからない。

+0

'--ignore-whitespace'は私のためには機能しませんでした。まったく同じように返されました。 しかし、 '-Xignore' ...パラメタはうまくいかなかった - 彼らは私に同じマージ競合を残しましたが、空白の問題があるというメッセージはありませんでした。 –

+0

@andrewlorienこれらの競合が空白のエラーによって引き起こされていること、または実際のコードの競合であることは確かですか?私のコメントは、最初のケースに適用されます。 – joanpau

+0

良い質問、ありがとう。私は手動でエラーを修正しましたが、空白と実際のエラーが混在していると思われます。私は--ignore-whitespaceは助けにはならなかったと思うが、Xignore-space-at-eolは実際に空白の問題を無視して、同じ行にある他の問題を解決してくれたと思う。 –

関連する問題