2013-03-29 16 views
7

Wprowadziłem kilka zmian w oddziale new.git mówi mi, że I Scalam konflikt, ale także mówi mi, że żadne pliki nie wymagają scalenia

Zamawiam do master.

Kiedy próbowałem połączyć:

$ git merge new 
Auto-merging js/site.js 
CONFLICT (content): Merge conflict in js/site.js 
Automatic merge failed; fix conflicts and then commit the result. 

Więc zainstalowany KDiff3 i skonfigurowany moje pliki konfiguracyjne i kiedy próbowałem użyć mergetools mam:

$ git mergetool kdiff3 
No files need merging 

Pobiegłem diff i wyprowadzane to:

diff --cc js/site.js 
index 8c17d62,7955b13..0000000 
--- a/js/site.js 
+++ b/js/site.js 
@@@ -72,4 -81,18 +81,22 @@@ function doSmallScreen() 

    $(document).ready(function() { 
     calculateScreen(); 
- }); 
++<<<<<<< HEAD 
++}); 
++======= 
+  $(window).resize(function() { 
+   delay(function() { 
+    calculateScreen(); 
+   }, 500); 
+  }); 
+ }); 
+ 
+ 
+ var delay = (function() { 
+  var timer = 0; 
+  return function (callback, ms) { 
+   clearTimeout(timer); 
+   timer = setTimeout(callback, ms); 
+  }; 
-})(); 
++})(); 
++>>>>>>> new 

Jestem zdezorientowany, jak rozwiązać ten problem, chcę rozwiązać ten problem w najprostszy sposób nner możliwe, nie obchodzi mnie, czy utracę informacje z oddziału nowego, ale chcę zrozumieć, co poszło nie tak i dlaczego nie mogę korzystać z narzędzi do scalania.

Po prostu wydaje mi się dziwne, że mam konflikt scalania, ale nie trzeba scalać żadnych plików.

Odpowiedz

5

miałem ten problem, nawet jeśli tylko działa poprawne polecenie:

$ git mergetool 

Może to mieć coś wspólnego z posiadaniem rerere włączona (patrz link [red .: Link już nie działa])

I rozwiązany poprzez utworzenie dwóch aliasów w .gitconfig, którego inauguracją mergetool dla każdego pliku skonfliktowanego:

Dodaj to do swojego.gitconfig

# List conflicted files 
list-conflicts = !git ls-files -u | cut -f 2 | sort -u 

# Force mergetool to recognize conflicts 
force-mergetool = !git list-conflicts | xargs git mergetool 

tl; dr Wnioskiem, oto krótkie wyjaśnienie co to robi:

  • git ls-files -u: po próbie łączenia z konfliktów, to wymienia wszystkie pliki niezłączonych, wraz z niektórymi obce informacje i powtórzenia; jeśli uruchomić zaraz po scaleniu, to zasadniczo wszystkie pliki z konfliktów
  • | cut -f 2 wycina 2nd zakresie tego wyjścia, który jest zasadniczo ścieżka pliku
  • | sort -u eliminację duplikatów
  • | xargs git mergetool rur to lista plików w komenda mergetool, która uruchamia narzędzie do scalania GUI (zakładając, że masz jedną konfigurację)

Możesz więc uruchomić pierwsze polecenie, jeśli chcesz zobaczyć wymienione pliki. Druga komenda skieruje te wszystkie do narzędzia scalania (możesz użyć merge zamiast mergetool, jeśli to twoje preferencje).

Jeśli chcesz ją wypróbować na własną rękę przed dodaniem aliasu, można po prostu uruchomić jeden z tych dwóch komend z linii poleceń:

git ls-files -u | cut -f 2 | sort -u

git ls-files -u | cut -f 2 | sort -u | xargs git mergetool

pamiętać to tylko przyniesie żadnych wyników, jeśli wanre

+1

TAK! Zastanawiam się, dlaczego nie ma przegranych, nie możemy być jedynymi, którzy używają rerere! – pdem

+0

Czy możesz wyjaśnić więcej o tym, co to robi? Występuję w tym wydaniu i zasadniczo nie mogę scalić moich plików ... – Chrisgozd

+0

@Chrisgozd, dodano wyjaśnienie do odpowiedzi – kghastie

Powiązane problemy